【发布时间】:2016-09-28 13:47:43
【问题描述】:
在我的 DEV 机器中,我有一个 Web 应用程序(SharePoint 站点)和一个简单的 ASP.NET MVC 应用程序,它们都位于同一个 IIS 实例中。他们有不同的域(但都使用 SSL):
SharePoint Web 应用程序有一个类似“https://sp-dev.company.com”的 URL,带有公司 CA 颁发的证书。
MVC Web 应用只有一个自签名证书和 URL,例如“https://localhost:44303”
SharePoint 站点的主页有一个 ScriptEditor Web 部件,它只是在页面上“注入”JavaScript 代码来查询 MVC 应用程序:
jQuery.support.cors = true;
$.ajax({
crossDomain: true,
url: requestUrl,
type: "POST",
data: JSON.stringify(payload),
dataType: 'json',
headers: {
"accept": "application/json;charset=utf-8",
"Content-Type": "application/json;charset=utf-8"
},
success: function (data) {
...;
},
error: function (err) {
...;
}
});
问题是:当我在 IE 11 中运行此代码时,当 MVC 应用程序在 IIS Express 中运行时,它会在 MVC 应用程序中遇到断点(即请求实际获取应用程序)。但是,当 MVC 应用程序在“真实”IIS 中运行时,IE 11 似乎会阻止请求,甚至不会将其发送到应用程序池。我在后一种情况下看到的错误是
XMLHttpRequest: Network Error 0x80070005, Access is denied.
可能是什么原因?我想,我尝试了一切,从添加 web.config 元素,如
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
在 Startup.Configuration() 方法中启用 CORS,例如
public class Startup
{ 私有静态只读 EsClosureConfiguration EsClosureConfigSection = WebConfigurationManager.GetSection(Constants.ESClosureConfigSectionName) as EsClosureConfiguration;
public void Configuration(IAppBuilder app)
{
//// ConfigureAuth(app);
app.UseCors(CorsOptions.AllowAll);
并在 IE 中添加不同区域的站点的 URL。没有什么帮助。也许我在挖掘错误的方向?
【问题讨论】:
-
看起来像 CORS 问题,只需从与您用于从 ajax 代码发送数据的 URL(域)相同的域运行 JS 代码,不要从独立的 HTML 文件运行 JS 脚本一些 xyz 目录!
标签: javascript asp.net-mvc internet-explorer cors