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

标签 asp.net-mvc rest http-headers http-method

我正在使用 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/

相关文章:

c# - HttpContext.Current 未在 MVC 4 项目中解析

c# - 首先在 Entity Framework 数据库中级联删除

c# - 如何在 MVC 应用程序中处理多种语言?

java - 带有接口(interface)的 REST API - JAXB

java - 无法在 Spring 服务中使用 ReposiotryResource 端点

javascript - CORS header 'Access-Control-Allow-Origin' 不匹配...但确实匹配‼

asp.net-mvc - 从客户端检测到潜在危险的 Request.Form 值

php - 验证应该在哪里进行?

.net - 获取基本登录提示而不是重定向

HTTP:主机 header 字段中是否允许使用 IP 地址?