加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 是否有可能在ASP.NET MVC中实现X-HTTP-Method-Ov

发布时间:2020-12-16 03:42:50 所属栏目:asp.Net 来源:网络整理
导读:我正在使用ASP.NET MVC实现RESTful API的原型,除了奇怪的bug之外,我已经实现了我在开始时提出的所有要求,除了调用者能够使用X-HTTP-方法 – 覆盖自定义标头以覆盖HTTP方法. 我想要的是以下要求…… GET /someresource/123 HTTP/1.1X-HTTP-Method-Override: D
我正在使用ASP.NET MVC实现RESTful API的原型,除了奇怪的bug之外,我已经实现了我在开始时提出的所有要求,除了调用者能够使用X-HTTP-方法 – 覆盖自定义标头以覆盖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) { /* ... */ }

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

解决方法

您将无法按原样使用[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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读