繁体   English   中英

在启用了窗口身份验证的情况下对asp.net Web API端点进行Ajax调用时出现401未经授权的错误

[英]401 Unauthorized error when making ajax call to asp.net web api endpoint with window authentication enabled

我创建了一个简单的ASP.NET Web API应用程序。 我使用Microsoft.AspNet.WebApi.Cors程序包启用了CORS。

这是我的控制器的外观:

public class UserController : ApiController
    {
        [Route("user/name")]
        [HttpGet]
        public HttpResponseMessage GetUserName()
        {
            dynamic data = new ExpandoObject();
            data.user = HttpContext.Current.User.Identity.Name;
            var response = JsonConvert.SerializeObject(data);

            var msg = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(response)
            };

            return msg;
        }
    }

我只是从此控制器返回用户ID。

我已经在IIS 8.5上托管了该应用程序。 我已禁用匿名身份验证并启用了Windows身份验证。

如果使用Rest Client或通过在浏览器中输入URL直接访问端点,则会得到用户名。 如果我使用REST客户端,则会收到响应

但是如果我使用jquery进行AJAX调用,则会得到401状态代码。

$.ajax({url: 'http://serverName:8899/user/name',   method: 'GET' , 
success:function(res){
alert('hello');
}}) ;

上面的调用在IE中有效,仅chrome提供401错误

如何解决此错误。 我正在使用IIS启用Windows身份验证,而我根本没有更改web.config。 如果这是身份验证问题,为什么我在使用rest客户端时能够检索数据?

确保同时在全局,控制器或操作处注册CORS支持

全局-App_Start文件夹的WebApiConfig.cs文件中添加:

public static void Register(HttpConfiguration config) {

// New code: var cors = new EnableCorsAttribute( origins: "*", headers: "*", methods: "*"); config.EnableCors(cors);

// Other configurations

}

控制器动作-如果需要/需要在这些级别提供支持( 这将覆盖全局设置 -动作>控制器>配置)。 在控制器或动作上方签名:

[EnableCors(origins: "http://localhost:[port #]", headers: "*", methods: "*")]

注意: *是“通配符”,可能希望将发出请求的域放在例如:http:// localhost:[ port# ])

很容易错过/忘记的事情...

在解决方案资源管理器中,右键单击api-project。 在属性窗口中, 将“匿名身份验证”设置为“已启用”!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM