4

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

有人知道为什么会这样吗?

4

1 回答 1

4

首先,实现OnAuthorization()而不是OnActionExecuting(). OnAuthorization()在 之前执行OnActionExecuting()OnActionExecuting()即使在用户到达代码之前检查授权也很重要。

您的回答:最可能的情况是在生产web.config文件<authentication>中设置为“无” 。如下更改它,您将全部设置好:

<authentication mode="Forms"/>
于 2012-12-27T20:19:45.643 回答