我正在使用asp.net mvc 4 rest并编写自己的basec身份验证逻辑。
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
else
{
//do staff here
}
}
它适用于本地iis。但是它在生产工作站上不起作用。我总是空的。我设置了在IIS上启用的基本身份验证。我正在Fiddler进行测试,我的要求如下所示:
User-Agent: darwin/1.0 CFNetwork/548.1.4 Darwin/11.0.0
Authorization: Basic cmFkaWt2b3N0b2tAZ21haWwuY65tJjE6QkFBREVEcHlQYmtjQkFOcXh4UmFrdG1JMUJ2bjBPYXVQVk9NcnFZMEg4V3BhakljSlk2WkJMTWtra1FIWHFrcEZmdEkyNmFEZEppYWlKVVZJOTZpUGJuMzRMc1luemJHM2FPV3paQk5DTG1Xak9FZGU3YTdGWVhVem1QeTlEWkM4cW02YWZoWkJGWkIzbGFXMTNaQjlKdQ==
Content-Length: 10128
Accept: application/json
Content-Type: application/json
Connection: keep-alive
Host: 192.168.7.4
有人知道为什么会这样吗?
最佳答案
首先,实现OnAuthorization()
而不是OnActionExecuting()
。 OnAuthorization()
在OnActionExecuting()
之前执行。重要的是,即使在用户到达OnActionExecuting()
代码之前,也要检查授权。
但是您的答案是:最可能的情况是在生产web.config文件中<authentication>
设置为“ None”。进行如下更改,您将全部准备就绪:
<authentication mode="Forms"/>