我正在使用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"/>

07-27 23:35