나는 형태로 다음과 같이 있습니다 다음과 같습니다 컨트롤러 액션에한 컨트롤러 액션에서 다른 컨트롤러 액션으로 AntiForgeryToken을 전달하는 방법은 무엇입니까?
using (Html.BeginForm("MockEcaCertLogin", "Authentication", new { area = "Login" }, FormMethod.Post))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<div class="well">
<h1 class="bg-danger" style="padding:3px; border: 1px solid black">Mock ECA Login</h1>
<div class="margin-bottom-20 margin-top-20">
@Html.DropDownList("CertName", new List<SelectListItem>()
{
new SelectListItem() { Text = "First Last", Value = "First .Last.M.CCCDDDDDDDDDD.ID" },
new SelectListItem() { Text = "First Last", Value = "First Last" },
})
<button type="submit" class="btn btn-default">Login</button>
</div>
</div>
}
이 양식 게시물 :
[HttpPost, ValidateAntiForgeryToken, ValidateModelState]
public void MockEcaCertLogin(string certName)
{
var urlHelper = new UrlHelper(this.HttpContext.Request.RequestContext);
var destinationUrl = urlHelper.Action("Login", "Authentication");
var headers = new NameValueCollection();
headers.Add("X-ARR-ClientCert", certName);
HttpContext.Server.TransferRequest(destinationUrl, true, "POST", headers);
}
그래서 양식 게시물 컨트롤러 액션에 ValidateAntiForgery 토큰을.
//[HttpPost, ValidateAntiForgeryToken, ValidateModelState]
[HttpPost, ValidateModelState]
public ActionResult Login()
{
var certificateName = GetCertificate();
가 어떻게 다음 일에 첫 번째 작업에서 AntiForgeryToken를 전달하거나 전달하는 새로운 하나를 만들 수 있습니다 그리고 작업이 작업에 전송 요청을합니까?
는 일반적으로 우리는 두 번째 작업에 양식을 게시 그래서 우리는 정상을 준이 : 형태@Html.AntiForgeryToken()
라인.
하지만 첫 번째 액션으로 넘어가 다른 액션으로 컨트롤을 전달하는 다른 폼에서 뭔가를하고 있습니다.
그러나이 경로를 탐색 할 때 ValidateAntiForgeryToken attrubute가이를 깨뜨립니다.