Когда вы вызываете RedirectToAction
внутри контроллера, он автоматически перенаправляет с помощью HTTP GET. Как я могу явно указать ему использовать HTTP POST?
У меня есть действие, которое принимает запросы GET и POST, и я хочу иметь возможность RedirectToAction
использовать POST и отправлять ему некоторые значения.
Как это:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
Я хочу , чтобы someValue
и anotherValue
значения , которые будут отправлены с помощью HTTP POST вместо GET. Кто-нибудь знает как это сделать?
asp.net-mvc
url-redirection
Крис Питчманн
источник
источник
Ответы:
HTTP не поддерживает перенаправление на страницу с помощью POST. Когда вы куда-то перенаправляете, HTTP-заголовок «Location» сообщает браузеру, куда идти, и браузер делает GET-запрос для этой страницы. Вероятно, вам придется просто написать код для своей страницы, чтобы принимать запросы GET, а также запросы POST.
источник
В вашем конкретном примере я бы просто сделал это, поскольку вы, очевидно, не заботитесь о том, чтобы браузер все равно получил перенаправление (в силу принятия ответа, который вы уже приняли):
Это работает легко, и на самом деле нет никакого забавного бизнеса - это позволяет вам поддерживать тот факт, что второй действительно принимает только запросы HTTP POST (за исключением этого случая, который в любом случае находится под вашим контролем), и вам не нужно также используйте TempData, что предлагает ссылка, которую вы разместили в своем ответе.
Я хотел бы знать, что в этом "не так", если есть что-нибудь. Очевидно, что если вы действительно хотите отправить в браузер перенаправление, это не сработает, но тогда вы должны спросить, почему вы пытаетесь преобразовать это в любом случае, поскольку мне это кажется странным.
Надеюсь, это поможет.
источник
Если вы хотите передавать данные между двумя действиями во время перенаправления без включения каких-либо данных в строку запроса, поместите модель в объект TempData.
ДЕЙСТВИЯ
TempData["datacontainer"] = modelData;
ПОСМОТРЕТЬ
TempData предназначена для очень недолговечного экземпляра, и вы должны использовать его только во время текущего и последующих запросов! Поскольку TempData работает таким образом, вам нужно точно знать, каким будет следующий запрос, и перенаправление на другое представление - единственный раз, когда вы можете гарантировать это.
Следовательно, единственный сценарий, в котором использование TempData будет надежно работать, - это перенаправление.
источник
Попробуй это
источник
Я хотел бы расширить ответ Джейсона Бантинга
как это
И Эли будет здесь, чтобы получить представление о том, как сделать его общей переменной.
Можно получить все типы контроллеров
источник
new ...()
потому что вы потеряетеRequestContext
- если вы уже находитесь в том же контроллере, вам может не понадобиться создавать новый экземпляр. В противном случае используйте следующий способ:SampelController sampleController = DependencyResolver.Current.GetService<SampelController>()
затем:sampleController.ControllerContext = new ControllerContext(Request.RequestContext, sampleController);
тогда вы можетеreturn sampleController.Index(2, "text");
Просто подсказка :)