私はこのような形式を持つ:1つのコントローラアクションから別のコントローラアクションに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()
ラインを形に:
通常、私たちは私たちが通常を与えた2番目のアクションへのフォーム投稿を持っています。
しかし、私は最初のアクションに渡した別のフォームから何かをして、2番目のアクションにコントロールを渡します。
しかし、ValidateAntiForgeryTokenのattrubuteは私がこのルートに行くときにそれを壊します。