![](/img/trans.png)
[英]401:unauthorized when I try to call a method via AJAX in .net
[英]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.