RedirectToAction
컨트롤러 내에서 호출 하면 HTTP GET을 사용하여 자동으로 리디렉션됩니다. HTTP POST를 사용하도록 명시 적으로 어떻게 말합니까?
GET 및 POST 요청을 모두 허용하는 조치가 있으며 POST를 RedirectToAction
사용하여 값을 보낼 수 있기를 원합니다 .
이처럼 :
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
GET 대신 HTTP POST를 사용하여 someValue
및 anotherValue
값을 전송 하고 싶습니다 . 누구든지 이것을하는 방법을 알고 있습니까?
답변
HTTP는 POST를 사용하는 페이지로의 리디렉션을 지원하지 않습니다. 어딘가로 리디렉션하면 HTTP “Location”헤더가 브라우저에게 어디로 가야하는지 알려주고 브라우저는 해당 페이지에 대한 GET 요청을합니다. POST 요청뿐만 아니라 GET 요청을 수락하려면 페이지의 코드를 작성해야합니다.
답변
특정 예를 들어, 실제로 브라우저가 리디렉션을 가져 오는 것에 신경 쓰지 않기 때문에 (이미 수락 한 답변을 수락함으로써) 분명히 할 것입니다.
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index() {
// obviously these values might come from somewhere non-trivial
return Index(2, "text");
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(int someValue, string anotherValue) {
// would probably do something non-trivial here with the param values
return View();
}
그것은 쉽게 작동하고 실제로는 재미있는 사업이 없습니다-이것은 당신이 두 번째 요청이 실제로 HTTP POST 요청 만 수락한다는 사실을 유지할 수있게 해줍니다 (이 경우를 제외하고는 통제 할 수 있습니다). 답변에 게시 한 링크가 제안하는 TempData 중 하나를 사용하십시오.
나는 무언가가 있다면 이것에 “잘못된”것이 무엇인지 알고 싶습니다. 분명히 브라우저로 리디렉션을 보내려면 작동하지 않지만 나에게 이상한 것처럼 보이기 때문에 왜 변환하려고하는지 물어봐야합니다.
희망이 도움이됩니다.
답변
쿼리 문자열에 데이터를 포함하지 않고 리디렉션하는 동안 두 작업간에 데이터를 전달하려면 모델을 TempData 객체에 넣습니다.
동작
TempData["datacontainer"] = modelData;
전망
var modelData= TempData["datacontainer"] as ModelDataType;
TempData는 수명이 매우 짧은 인스턴스이므로 현재 및 후속 요청 중에 만 사용해야합니다! TempData는 이러한 방식으로 작동하므로 다음 요청이 무엇인지 확실히 알아야하며 다른 뷰로 리디렉션하는 것이이를 보장 할 수있는 유일한 시간입니다.
따라서 TempData를 사용하여 안정적으로 작동하는 유일한 시나리오는 리디렉션하는 경우입니다.
답변
이거 한번 해봐
return Content("<form action='actionname' id='frmTest' method='post'><input type='hidden' name='someValue' value='" + someValue + "' /><input type='hidden' name='anotherValue' value='" + anotherValue + "' /></form><script>document.getElementById('frmTest').submit();</script>");
답변
Jason Bunting의 답변을 확장하고 싶습니다
이처럼
ActionResult action = new SampelController().Index(2, "text");
return action;
그리고 Eli는 일반적인 변수로 만드는 방법에 대한 아이디어를 얻을 것입니다.
모든 유형의 컨트롤러를 얻을 수 있습니다