【发布时间】:2018-04-21 13:56:25
【问题描述】:
我们在身份验证控制器中有一个登录方法,如下所示:
[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");
}
这应该回到原始的登录方法,并且证书将在标头中准备好进行身份验证,因此我们可以测试它是否有效。
问题是 RedirectToRouteResult 不能是帖子。 我怎样才能做到这一点?有人知道吗?
【问题讨论】:
-
RedirectResult 总是发出一个 GET 请求。所以你不能用
RedirectToAction发帖 -
为什么要在请求中添加标头然后放弃它?迄今为止的尝试似乎是基于一些误解。
-
为什么不在客户端设置标题,然后使用javascript提交表单,登录httppost操作方法?
标签: asp.net-mvc http-post redirecttoaction