当前位置:  开发笔记 > 后端 > 正文

是否可以在ASP.NET MVC中实现X-HTTP-Method-Override?

如何解决《是否可以在ASP.NETMVC中实现X-HTTP-Method-Override?》经验,为你挑选了1个好方法。

我正在使用ASP.NET MVC实现RESTful API的原型,除了奇怪的bug之外,我已经实现了我在开始时设置的所有要求,除了调用者能够使用X-HTTP-Method-Override自定义标头覆盖HTTP方法.

我想要的是以下要求......

GET /someresource/123 HTTP/1.1
X-HTTP-Method-Override: DELETE

...将被调度到我的控制器方法,该方法实现DELETE功能而不是该GET操作的功能(假设有多个方法实现该操作,并且它们标记有不同的[AcceptVerbs]属性).因此,鉴于以下两种方法,我希望将上述请求分发给第二个:

[ActionName("someresource")]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetSomeResource(int id) { /* ... */ }

[ActionName("someresource")]
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult DeleteSomeResource(int id) { /* ... */ }

有人知道这是否可行?这样做会有多少工作......?



1> Levi..:

您将无法按原样使用[AcceptVerbs]属性,因为它与请求的实际HTTP谓词相关联.幸运的是,[AcceptVerbs]属性非常简单; 你可以看到自己的来源http://www.codeplex.com/aspnet/SourceControl/changeset/view/21528#266431.

简而言之,子类AcceptsVerbsAttribute并覆盖IsValidForRequest()方法.实现将类似于以下内容:

string incomingVerb = controllerContext.HttpContext.Request.Headers["X-HTTP-Method-Override"] ?? controllerContext.HttpContext.Request.Method;
return Verbs.Contains(incomingVerb, StringComparer.OrdinalIgnoreCase);

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有