401当启用窗口身份验证启用ajax调用asp.net web api端点时发生未授权错误
我创建了一个简单的ASP.NET web api应用程序。我使用Microsoft.AspNet.WebApi.Cors
软件包启用了CORS。401当启用窗口身份验证启用ajax调用asp.net web api端点时发生未授权错误
这是我的控制器的外观:
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客户端或通过在浏览器中输入URL直接访问端点,我会得到用户名。如果我使用REST客户端,我得到的响应
但如果我使用jQuery进行AJAX调用,我会得到401状态码。
$.ajax({url: 'http://serverName:8899/user/name', method: 'GET' ,
success:function(res){
alert('hello');
}}) ;
以上调用在IE中唯一的镀铬给401错误
我怎样才能解决这个错误。我使用IIS启用Windows身份验证,我根本没有改变我的web.config。如果这是验证问题,为什么我能够在使用休息客户端时检索数据?
我希望我能够正确回答这个问题,但我现在生病了,所以我可能会看到东西,哈哈。
但无论如何...如果您获取受限制的访问消息,您可以尝试添加一个.htaccess文件到您要发送文件的目录中。在你的.htaccess添加以下代码:
SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax
请确保您还寄存器CORS支持无论是在全球范围内,在控制器,或在行动。
全球 - 在你WebApiConfig.cs文件从App_Start添加文件夹:
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:[端口#])
一些很容易遗漏/遗忘的东西...
在解决方案资源管理器中,右键单击api-project。在属性窗口设置'匿名身份验证'启用!
可能重复[如何将Windows身份验证传递给使用jQuery的webservice?](http://stackoverflow.com/questions/1002179/how-can-i-pass-windows-authentication-to-webservice-using -jquery) –