无法在WebAPI 2

时间:2017-06-27 16:25:11

标签: c# cors asp.net-web-api2

这让我很疯狂,如果它重复,我会道歉,但我已经阅读了所有其他的WebAPI / CORS问题,并且找不到任何有效的配置。

我在.NET 4.6.1上有一个运行完美的WebAPI 2项目 - 控制器全部初始化等等。我可以直接调用不同的操作,一切都很好。

但是,当我尝试从其他网站调用AP​​I时,我知道我需要使用CORS启用此功能,否则我会收到500服务器错误/飞行前错误。

所以我安装了 System.Web.Http.Cors 并按照 WebApiConfig 中的指示执行了此操作:

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);

我希望所有ApiControllers和操作都能响应OPTIONS请求。我可以看到我的ajax请求发出OPTIONS请求,但是我从WebAPI收到内部服务器错误:

Request URL:http://localhost:55579/api/event?start=2017-06-01&end=2017-06-30
Request Method:OPTIONS
Status Code:500 Internal Server Error
Remote Address:[::1]:55579
Referrer Policy:no-referrer-when-downgrade

...并通过Postman进行直接OPTIONS调用给了我:

{
    "$id": "1",
    "message": "The requested resource does not support http method 'OPTIONS'."
}

我也尝试将该属性添加到我的控制器中,但这也没有效果。

[RoutePrefix("api/event")]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class EventController : ApiController

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您还需要在web.config中添加相应的http标头:

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