脚本:
我有两个应用程序,一个是“SPA web应用程序”,另一个是部署在Windows Server 2012上的IIS 8.0上的“web API 2.0”。
错误:
网站可以在同一台机器上访问并正常工作,但不能从外部访问,网页加载正确,但对API的ajax调用会生成以下错误。。。
已阻止跨源请求:同源策略不允许读取位于的远程资源。这可以通过将资源移动到同一域或启用CORS来解决。
在控制器级别
我添加了以下属性:
[EnableCors(起源:“
“,标题:”
“,方法:”*“,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
});
更多详情:
我已经在Windows Server 2008 R2上的IIS 7.5上部署了相同的网站,它工作正常,没有任何问题。
其次,我还尝试在IIS 8中添加以下响应标头。。
访问控制允许标头-内容类型
访问控制允许方法-POST、GET、OPTIONS
还尝试更改web.config中的以下值
到
到目前为止,这些都没有对我奏效。正在寻求进一步帮助。。。
修复::这只是防火墙阻止了托管的webapi端口:(