Angular,WebAPI和CORS

时间:2016-10-25 18:56:09

标签: angularjs asp.net-web-api cors

我正在运行一个带有角度的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 时,一切都按预期工作。我错过了什么?我在教程上搜索了教程,找到了我做得不对的东西,但似乎我已经包含了所有内容。

1 个答案:

答案 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();
        }
    }

已经完成了!