我如何进行RedirectToAction但是作为POST而不是GET?

时间:2017-11-08 18:33:25

标签: asp.net-mvc http-post redirecttoaction

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

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

GetCertificate()如下所示:

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

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

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

    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方法,并且证书将在标头中准备好进行身份验证,以便我们可以测试它是否有效。

问题是RedirectToRouteResult不能是帖子。 我怎样才能做到这一点?有谁知道吗?

1 个答案:

答案 0 :(得分:0)

这对我有用:

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