使用$resource调用远程webapi时angularjs访问被拒绝

使用$resource调用远程webapi时angularjs访问被拒绝,angularjs,asp.net-mvc,asp.net-web-api2,Angularjs,Asp.net Mvc,Asp.net Web Api2,我不确定我的Angular应用程序调用WebAPI是否存在CORS问题。我的ASP.NETMVC/App1和Web API托管在同一台IIS服务器上。例如,App1的url为。Web API url为{userNetworkName}。在MVC视图页面上有一个,它使用$resource从WebAPI获取数据。在VisualStudio2013 IDE中,当我点击F5在开发工作站上进行调试时,一切正常。我可以在IE开发者工具的网络选项卡中看到对Web API的调用。但是,当我将App1发布到该II

我不确定我的Angular应用程序调用WebAPI是否存在CORS问题。我的ASP.NETMVC/App1和Web API托管在同一台IIS服务器上。例如,App1的url为。Web API url为{userNetworkName}。在MVC视图页面上有一个,它使用$resource从WebAPI获取数据。在VisualStudio2013 IDE中,当我点击F5在开发工作站上进行调试时,一切正常。我可以在IE开发者工具的网络选项卡中看到对Web API的调用。但是,当我将App1发布到该IIS服务器时,似乎没有进行Web API调用。相反,我在IE开发者工具控制台中看到访问被拒绝。我有另一个MVC/Angular App2在同一个IIS上的不同文件夹中,代码几乎相同。App2的url为。它不会被拒绝访问。你能帮忙吗?谢谢

下面是Config.js

//
(功能(){
“严格使用”
var moduleName='configModule';
角模(moduleName,[]);
var apiKeyValuePair={
“api”:{
centralAdmin:'http://example.com/wcf_webapi/CentralAdmin/api/',
fsr:'http://example.com/FSRManagement/api/',
用户配置文件:'http://example.com/wcf_webapi/clinicaluserprofile/api/'
}
}
var userKeyValuePair={
“用户帐户”:{
//这将在MVC视图页面块中引导和更新
用户名:“”
}
}
//填充常量集合
angular.forEach(apiKeyValuePair,函数(val,键){
角度。模块(模块名称)。常数(键,值);
});
//填充值集合
angular.forEach(userKeyValuePair,函数(val,key){
角度。模块(moduleName)。值(键,值);
});

})();在App1中,在package manager控制台中运行此命令

Install-Package Microsoft.AspNet.WebApi.Cors
添加这个
config.EnableCors()在此行之前的webapiconfig.cs中-->
config.Routes.maphttprote

在控制器中添加此属性
[EnableCors(来源:“*”,标题:“*”,方法:“*”)
。这样做将允许您使用任何Http谓词接受来自任何域的请求

我还建议您为App2中的所有httpRequest制作一个包装器,并将其注入控制器的工厂服务中


谢谢你的帮助。我刚刚发现MVC global.asax.cs添加了一个要求HTTPS的过滤器,但是config.js中的WebAPI端点使用HTTP。因此,出现了CORS问题。在本例中,App1的url为。WebAPI是{userNetworkName}。我将WebAPI端点更改为使用HTTPS协议,然后一切正常。

您的WebAPI中是否启用了cors?如果本地主机是不同的解决方案,则它们在不同的端口上运行,除非它们在同一个解决方案下,否则您将收到跨源请求错误谢谢您的帮助。WebApi位于不同的解决方案中,未启用CORS。App1和App2采用不同的解决方案。我想知道为什么App2可以工作,而App1不能。唯一的区别是App2中的Angular代码在一个js文件中包含一个模块中的所有内容,除了ngResource.js。App1更模块化为五个模块。很高兴您自己发现了这个问题:)