CORS 问题 IIS 8 Windows Server 2012
CORS issue IIS 8 Windows Server 2012
场景:
我有两个应用程序,一个是 "SPA web application",另一个是 "Web API 2.0",它部署在 Windows Server 2012 上的 IIS 8.0 上。
错误:
网站可以访问并且在同一台机器上工作正常但不能从外部访问,网页已正确加载但在 ajax 调用 API 时会生成以下错误...
Cross-Origin 请求被阻止:同源策略不允许读取位于 的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。
在控制器级别 我添加了以下属性:
[EnableCors(来源:“”,headers:“”,方法:“*”,SupportsCredentials = true)]
还在WebApiConfig.cs
中启用了它
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional, action = "DefaultAction" }
);
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
}
web.config服务器配置是这样的..
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
下面是 ajax 调用的片段..
$.ajax({
type: 'get',
url: webApiUrl,
success: function (response) {
// some logic here
},
error: function (response) {
// some logic here
},
xhrFields: {
withCredentials: true
},
crossDomain: true
});
FURTHER DETAILS:
我在 Windows Server 2008 R2 上的 IIS 7.5 上部署了相同的网站,它运行良好,没有任何问题。
其次,我还尝试在 IIS 8 中添加以下响应 headers..
Access-Control-Allow-Headers - Content-Type
Access-Control-Allow-Methods - POST,获取,选项
还尝试更改 web.config
中的以下值
到
到目前为止,None 对我有用。寻求进一步的帮助...
已修复 :: 那只是防火墙阻止了托管 Web api 端口 :(
只是防火墙阻止了托管网站 api 端口
场景: 我有两个应用程序,一个是 "SPA web application",另一个是 "Web API 2.0",它部署在 Windows Server 2012 上的 IIS 8.0 上。
错误: 网站可以访问并且在同一台机器上工作正常但不能从外部访问,网页已正确加载但在 ajax 调用 API 时会生成以下错误...
Cross-Origin 请求被阻止:同源策略不允许读取位于 的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。
在控制器级别 我添加了以下属性: [EnableCors(来源:“”,headers:“”,方法:“*”,SupportsCredentials = true)]
还在WebApiConfig.cs
中启用了它public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional, action = "DefaultAction" }
);
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
}
web.config服务器配置是这样的..
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
下面是 ajax 调用的片段..
$.ajax({
type: 'get',
url: webApiUrl,
success: function (response) {
// some logic here
},
error: function (response) {
// some logic here
},
xhrFields: {
withCredentials: true
},
crossDomain: true
});
FURTHER DETAILS:
我在 Windows Server 2008 R2 上的 IIS 7.5 上部署了相同的网站,它运行良好,没有任何问题。
其次,我还尝试在 IIS 8 中添加以下响应 headers.. Access-Control-Allow-Headers - Content-Type Access-Control-Allow-Methods - POST,获取,选项
还尝试更改 web.config
中的以下值到
到目前为止,None 对我有用。寻求进一步的帮助...
已修复 :: 那只是防火墙阻止了托管 Web api 端口 :(
只是防火墙阻止了托管网站 api 端口