我正在使用 ASP.NET MVC 实现一个 RESTful API 的原型(prototype),除了这里和那里的奇怪错误之外,我已经实现了我在开始时提出的所有要求,除了调用者能够使用 X-HTTP-Method-Override
自定义 header 以覆盖 HTTP 方法。
我想要的是以下请求......
GET /someresource/123 HTTP/1.1
X-HTTP-Method-Override: DELETE
...将被分派(dispatch)到实现
DELETE
的 Controller 方法功能而不是 GET
该操作的功能(假设有多个方法实现该操作,并且它们标记有不同的 [AcceptVerbs]
属性)。因此,鉴于以下两种方法,我希望将上述请求发送到第二种方法:[ActionName("someresource")]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetSomeResource(int id) { /* ... */ }
[ActionName("someresource")]
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult DeleteSomeResource(int id) { /* ... */ }
有人知道这是否可能吗?这样做需要做多少工作......?
最佳答案
您将无法按原样使用 [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);
关于asp.net-mvc - 是否可以在 ASP.NET MVC 中实现 X-HTTP-Method-Override?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/467535/