我已经经历过了 Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3 但没有一个答案/建议似乎对我的设置有所帮助。
Applicaiton Architecture:
IIS配置:
客户端主要仅由业务用户访问。访问权限仅来自公司网络。客户端通过Windows身份验证仅验证用户。这是驱动其余权限的原因。这绝不可能改变。
为了确保webapi能够以合适的方式设置正确的用户。身份验证/ Windows身份验证已启用。休息一切都被禁用了。
不,有效:
WebApis在本地托管(localhost:86)。 (对于这种失败的情况,这不需要改变。需要修复api,以便尊重对localhost的跨域请求。)
当客户端在本地托管(localhost:82),并且reportsHome.aspx页面的脚本对locahost:86 / api / reports / list进行$ .ajax调用时,报告列表就会出现。
到目前为止很好。
然后我们需要将客户端推送到我们的dev服务器,由于Cors尚未实现,因此由于预先设置不足而导致这个$ .ajax调用失败。
所以我们按照http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
的说明继续实施CORS我的快速设置角色设置如下所示
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute(
origins: "*",
headers: "*",
methods: "*");
cors.SupportsCredentials = true;
config.EnableCors(cors);
没有什么太花哨的,只允许每个人现在访问。我打算稍后将配置移到webconfig。
CORS设置后的问题:
所以,设置完毕后,localhost:82 /仍然正常。 然而开发服务器:82 /仍然没有工作。想象CORS飞行前飞行失败了401
Response HTTP/1.1 401 Unauthorized
Cache-Control private
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/7.5
WWW-Authenticate Negotiate
WWW-Authenticate NTLM
X-Powered-By ASP.NET
Date Mon, 14 Dec 2015 12:02:01 GMT
Content-Length 6315
通过返回所需的标头以验证CORS预检
来解决此问题protected void Application_BeginRequest(object sender, EventArgs e)
{
Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
if ((Context.Request.Path.Contains("api/") || Context.Request.Path.Contains("odata/")) &&
Context.Request.HttpMethod == "OPTIONS")
{
Context.Response.AddHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept,MaxDataServiceVersion");
Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
Context.Response.AddHeader("Access-Control-Allow-Credentials", "true");
Context.Response.End();
}
}
这修复了CORS预飞行问题,并允许后续的GET / POST请求。但是现在, THE ISSUE 是来自dev-server的GET / POST请求:82 /)正在返回401.2
Response HTTP/1.1 401 Unauthorized
Cache-Control private
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/7.5
Access-Control-Allow-Origin *
WWW-Authenticate Negotiate
WWW-Authenticate NTLM
X-Powered-By ASP.NET
Date Mon, 14 Dec 2015 12:56:27 GMT
Content-Length 6343
来自localhost:82的任何请求仍然没问题。那里没有问题。
任何帮助解决这些问题,指出我错过或做错了什么,非常感谢。
谢谢,