Переписать HTTP-метод с ASP .NET

Поскольку большинство браузеров поддерживают только HTTP GET и POST, было бы полезно иметь HttpHandler, который может переписать метод HTTP.

Метод HTTP будет установлен со скрытым полем:

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

Если пользователь отправляет запрос, отправляется запрос POST, и IHttpHandler должен заменить запросы HttpMethod, но это свойство только для чтения в.NET.

Как я могу переписать метод HTTP в.NET?

3 ответа

Решение

В mvc (версия 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

Если вы уже управляете серверной частью уравнения, почему бы не написать прокси-сервер, чтобы сделать это для вас? Вы можете использовать что-то вроде FiddlerCore, чтобы сделать тяжелую работу.

Он может быть многократно использован в широком спектре приложений и не обязательно должен быть специфичным для IIS и.NET.

Ты можешь использовать HttpContext.Current.Request.RequestType, Это свойство не только для чтения, и вы можете изменить его на C#.

Для получения дополнительной информации, проверьте это.

Другие вопросы по тегам