ASP MVC: атрибут ActionFilter -> RedirectToRouteResult всегда перенаправляет на HTTP GET - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть атрибут ActionFilter в верхней части моего контроллера.

[HandleError]
[MyActionFilter]
public class AccountController : Controller
{
  ...
}

Когда действие получено, я хочу добавить / изменить некоторые значения маршрута и затем перенаправить на правильный маршрут.

filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { lang = langName, controller = controllerName, action = actionName, id = idName }));

Это работает нормально. Однако перенаправление всегда установлено на HTTP GET, и поскольку некоторые из моих действий настроены на получение только HTTP POST, происходит сбой.

Есть ли способ сделать перенаправление HTTP POST?

Ответы [ 2 ]

6 голосов
/ 28 ноября 2011

Есть ли способ сделать перенаправление HTTP POST?

Нет.Глагол GET лежит в основе определения перенаправления в спецификации HTTP.Просто не имеет смысла говорить о перенаправлении HTTP и HTTP-глаголе, отличном от GET.

Вместо перенаправления вы можете вернуть представление напрямую:

var result = new ViewResult
{
    ViewName = "~/Views/Shared/SomeView.cshtml",
};
result.Model = new MyViewModel();
filterContext.Result = result;
0 голосов
/ 28 ноября 2011

Как вы сказали, вы перенаправляете ваших пользователей на другое действие. Это в протокол HTTP означает, что вы отправляете коды 301 , 302 или 303 вместе с вашим ответом в браузер клиентов.

С другой стороны, браузер всегда отправляет HTTP Get в ответ на перенаправление HTTP.

Таким образом, ваш ответ:

нет

Нет

...