所以我一直在拖着我能找到的关于这个主题的每一篇文章,但仍然没有想出来。希望你能提供帮助:
启用了CORS的Web API 2:
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
web.config:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Windows" />
</system.web>
的jQuery
<script>
$(document).ready(function()
{
$("button").click(function()
{
var endpoint = "http://localhost:82/api/test";
var base64Credentials = window.btoa("domain\credentials:password");
$.ajax({
url: endpoint,
beforeSend: function(xhr) {
xhr.withCredentials = true;
xhr.setRequestHeader("Authorization", "Basic " + base64Credentials);
},
success: function(result) {
alert(result);
}
});
});
});
</script>
IIS已启用基本身份验证。
Basic Auth在IE中运行。 Firefox和Chrome受预检OPTIONS调用。
使用Fiddler,我可以看到,如果我将IIS设置为同时允许匿名身份验证和基本身份验证,那么OPTIONS调用将导致200,然后随后基本身份验证的GET开始,并且一切都在世界上。如果我关闭Anonymous,那么我在OPTIONS调用上得到401。
问题:
是否要求允许匿名和基本身份验证支持此用例?
答案 0 :(得分:1)
我在其中一个项目中部分解决了这个问题。它总是在IE中运行,但在Chrome中我仍会得到随机的401回复请求,但当我检查响应时,web api正在发送JSON数据,以便它通过OPTIONS。
Web API的IIS站点配置是: - Windows Auth,匿名禁用; - 在Windows Auth提供程序(右侧选项)下,将NTLM移至顶部
在你的web.config中:
<httpProtocol>
<customHeaders>
<!-- Allows auth in CORS AJAX requests -->
<add name="Access-Control-Allow-Credentials" value="true" />
<!-- May only ever be one value - a domain or "*". "*" is disallowed when Access-Control-Allow-Credentials is true -->
<add name="Access-Control-Allow-Origin" value="http://localhost:63415" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Headers, Access-Control-Request-Method" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, HEAD, OPTIONS" />
</customHeaders>
</httpProtocol>
和Global.asax.cs
protected void Application_BeginRequest()
{
// When Chrome sends the OPTIONS it breaks on windows auth, so this fixes it.
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.StatusCode = (int)HttpStatusCode.OK;
Response.Flush();
}
}
所有这一切都没有使用CORS NuGet包。我试过了,但我仍然遇到OPTIONS问题。
编辑:关于这一点的更新,现在看来Chrome中的所有内容都非常适合我。