用ASP .NET重写HTTP方法

时间:2011-03-15 16:29:10

标签: c# .net asp.net http rest

因为大多数浏览器只支持HTTP GET和POST,所以有一个可以重写HTTP方法的HttpHandler会很有用。

HTTP方法将设置隐藏字段:

<form method="POST" action="...">
  <input type="hidden" name="_method" value="PUT">
  ...
</form>

如果用户提交,则发送POST请求,IHttpHandler应替换请求HttpMethod,但它是read-only property in .NET

如何在.NET中重写HTTP方法?

3 个答案:

答案 0 :(得分:2)

在mvc(ver 2+)中,您可以使用HtmlHelper.HttpMethodOverride帮助程序,它使用所需的操作方法创建隐藏的输入值。

http://msdn.microsoft.com/en-us/library/ee402924.aspx

这会创建此隐藏输入(用于删除):
<input name="X-HTTP-Method-Override" type="hidden" value="DELETE" />

更多信息:

http://geekswithblogs.net/michelotti/archive/2010/01/08/implementing-a-delete-link-with-mvc-2-and-httpmethodoverride.aspx

更新:

更深入地了解它在MVC管道中是如何工作的,它实际上是MVC(ActionMethodSelectorAttribute,ActionInvoker,RedirectToRoute)来处理这个而不是 RouteModule就像我之前想的那样。

你可以在MVC源代码中查找它(来自codeplex)......它非常直截了当。 HttpRequestBaseExtensions和HttpRequestExtensions

中更有趣的部分

答案 1 :(得分:0)

如果您已经控制了等式的服务器端,为什么不编写代理服务器来为您执行此操作?您可以使用FiddlerCore之类的东西来完成繁重的工作。

它可以在各种应用程序中重用,并且不一定需要特定于IIS和.NET。

答案 2 :(得分:0)

您可以使用HttpContext.Current.Request.RequestType。此属性不是只读的,您可以在c#上更改它。

有关详细信息,请check this