Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将AntiForgeryToken从一个控制器操作传递到另一个控制器操作?_C#_Asp.net Mvc_Razor_Antiforgerytoken - Fatal编程技术网

C# 如何将AntiForgeryToken从一个控制器操作传递到另一个控制器操作?

C# 如何将AntiForgeryToken从一个控制器操作传递到另一个控制器操作?,c#,asp.net-mvc,razor,antiforgerytoken,C#,Asp.net Mvc,Razor,Antiforgerytoken,我有一张这样的表格: using (Html.BeginForm("MockEcaCertLogin", "Authentication", new { area = "Login" }, FormMethod.Post)) { @Html.ValidationSummary(true) @Html.AntiForgeryToken() <div class="well"> <h1 clas

我有一张这样的表格:

    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属性会破坏它。

这是不可能的。防伪令牌基于Http Cookie和表单中的隐藏值;执行操作重定向时,该表单值将丢失,因此无法验证防伪令牌

你将需要拿出一个设计,不需要行动重定向

信用证:-罗伊·迪克图斯