我正在运行一个带有角度的Web应用程序,需要调用单独的ASP.NET Web API应用程序来检索数据。它们都运行在不同的端口上:( Web服务器) 44302 和(web api服务器) 44307 。我知道要这样做,需要在Web API服务器上启用CORS,我已尽最大努力正确设置:
<system.webServer>
<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, Authorization" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
并在ApiController上:
[EnableCors(origins: "http://localhost:44302", headers: "*", methods: "*")]
public class ClientController : ApiController
{
// GET: Client
public IEnumerable<Client> Get()
{
...
}
...
此外,我已将此添加到angular:
$httpProvider.defaults.useXDomain = true;
不幸的是,来自angular的简单API调用仍会返回404错误..
this.getClients = function() {
return $http.get('/api/client');
}
在浏览器中输入 localhost:44307 / api / client 时,一切都按预期工作。我错过了什么?我在教程上搜索了教程,找到了我做得不对的东西,但似乎我已经包含了所有内容。
答案 0 :(得分:2)
不要像你提到的那样启用CORS。
按如下方式进行:
在Global.asax中,添加以下方法来配置CORS:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Authorization, Accept");
HttpContext.Current.Response.End();
}
}
已经完成了!