没有“Access-Control-Allow-Origin”标头

时间:2014-08-22 15:09:41

标签: asp.net-web-api access-control

我已将参数放在正在调用的web.api的web.config中。我甚至把它放在webapiconfig.cs中,以允许所有网站点击web.api。甚至把它放在控制器上。而我仍然收到这条消息?调用网站正在将json发送到我的网络API。我为什么会这样做?我可以告诉你们哪些信息可以帮我解决这个问题?

回复下面列出的解决方案:这是我的web.config ....我把星号的通配符放在其中:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="*"/>
    <add name="Access-Control-Allow-Headers" value="*" />
  </customHeaders>
</httpProtocol>

在我的webapiconfig.cs文件中,我也有以下内容:

{
    // enable CORS
    config.EnableCors(new EnableCorsAttribute("*", "*", "*", "*"));
}

这是我的控制器。我知道,矫枉过正,但我​​想弄清楚这个问题:

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class ExampleController : ApiController

2 个答案:

答案 0 :(得分:1)

只需检查您的web.config文件并搜索system.webServer部分:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="Access-Control-Allow-Origin" />
            <remove name="Access-Control-Allow-Headers" />
            <add name="Access-Control-Allow-Headers" value="Origin,X-Requested-With,Content-Type,Accept" />             
        </customHeaders>
    </httpProtocol>
</system.webServer>

答案 1 :(得分:0)

请仔细阅读https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS以了解正在发生的事情,并http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api了解如何在ASP.net中解决此问题

基本上,如果您的请求是从另一个服务器上的另一个服务器发送到另一个服务器,则另一个服务器必须说它很乐意接受来自第一个域的浏览器的请求。

要解决此问题,请告诉ASP.net返回&#39; Access-Control-Allow-Origin&#39;包含您的请求来源的标头,可以通过web.config(如另一个答案),也可以添加到您的配置和控制器类中,如下所示:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.EnableCors();

        // ...
    }
}

namespace WebService.Controllers
{
    [EnableCors(origins: "http://myclientdomain.azurewebsites.net", headers: "*", methods: "*")]
    public class TestController : ApiController
    {
        // ...
    }
}