문제

를 호출할 때 RedirectToAction 에서 컨트롤러에 자동으로 리디렉션을 사용하여 HTTP GET.어떻게 명시적으로 말을 사용하는 HTTP POST?

제가 작업하는지 모두 GET 및 POST 요청,그리고 나는 할 수 있어야 RedirectToAction 를 사용하여 게시하고 보내는 일부의 값입니다.

다음과 같다:

this.RedirectToAction(
    "actionname",
    new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);

내가 원하는 someValueanotherValue 값을 사용하여 전송 HTTP POST 대신 얻을.가 누구나 알고 어떻게 하면 이렇게 할 수 있습니까?

도움이 되었습니까?

해결책

HTTP는 Post를 사용하여 페이지로 리디렉션을 지원하지 않습니다. 어딘가에 리디렉션되면 HTTP "위치"헤더는 브라우저에 어디로 이동 해야하는지 알려주고 브라우저는 해당 페이지에 대한 요청을합니다. 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는 일반 변수를 만드는 방법에 대한 아이디어를 얻기 위해 여기에있을 것입니다.

모든 유형의 컨트롤러를 얻을 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top