2017-11-08 7 views
0

私たちはこのように見える認証コントローラでのログイン方法があります。RedirectToActionをGETではなくPOSTとして実行するにはどうすればよいですか?

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

基本的に私たちは、認証のためのヘッダーで証明書を使用している:

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

GetCertificate()は次のようになります。だから今、私たちは証明書ヘッダーが動作することをテストしようとしています。

私は私達の証明書サービス提供メカニズムをモックするために、このように見えるのフォームを持っている:ここ

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

ヘッダーの中で認証の準備が整っていることを確認して、動作することをテストできます。

問題は、RedirectToRouteResultを投稿にすることができないことです。 これをどうすれば実現できますか?誰か知っていますか?

+1

RedirectResultはいつもあなたが 'RedirectToAction' – Shyju

+0

はなぜあなたが要求にヘッダを追加し、それを放棄しているとポストを行うことはできませんrequest.So GETを発行しますか?これまでの試みは多くの誤解に基づいているかもしれないようです。 – David

+0

クライアント側でヘッダーを設定してから、javascriptを使用してフォームをLogin httppostアクションメソッドに送信しないのはなぜですか? – Shyju

答えて

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); 
     } 
関連する問題