我怎样才能做一个重定向到操作,但作为一个帖子而不是一个 GET



我们在身份验证控制器中有一个登录方法,如下所示:

[HttpPost, ValidateModelState]
public ActionResult Login()
{
    var certificateName = GetCertificate();

GetCertificate() 看起来像这样:

public string GetCertificate()
{
    var headerCertificateValue = Request.Headers.Get("X-ARR-ClientCert");
    return headerCertificateValue;

基本上,我们在标头中使用证书进行身份验证。 所以现在我们正在尝试测试证书标头是否有效。

我有一个看起来像这样的表单来模拟我们的证书服务机制:

    using (Html.BeginForm("MockEcaCertLogin", "Authentication", new { area = "Login" }, FormMethod.Post))
    {
        @Html.ValidationSummary(true)
        @Html.AntiForgeryToken()
        <h1 class="bg-info">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 = "FirstLast" },
            })
            <button type="submit" class="btn btn-default">Login</button>
        </div>
    }

这篇文章在这里:

[HttpPost, ValidateAntiForgeryToken]
public RedirectToRouteResult MockEcaCertLogin(string certName)
{
    Request.Headers.Add("X-ARR-ClientCert", certName);
    return RedirectToAction("Login");
}

它应该回到原始的 Login 方法,并且证书将在标头中准备好进行身份验证,以便我们可以测试它是否有效。

问题是重定向到路由结果不能是帖子。我怎样才能做到这一点? 有人知道吗?

这对我有用:

        [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);
        }

相关内容

  • 没有找到相关文章

最新更新