MVC Web API - CORS 策略不起作用

Posted

技术标签:

【中文标题】MVC Web API - CORS 策略不起作用【英文标题】:MVC Web API - CORS Policy not working 【发布时间】:2015-11-14 22:51:39 【问题描述】:

我在现有的 MVC 应用程序中创建了一个简单的 Web API(通过添加一个 API 控制器)。我将 API 托管到 localhost 并创建了一个简单的 html 页面来调用服务并检查 CORS。为了启用,我用以下几行更改了我的 web.config 文件:

  <add name="Access-Control-Allow-Origin" value="*" />
  <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
  <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

一切正常,API 可以通过 html 页面访问 localhost。

通过相同的更改,我将它托管在服务器(共享托管服务器)上。它抛出了同样令人讨厌的错误

XMLHttpRequest cannot load http://www.mywebsite.com/api/Booking. Invalid HTTP status code 405

根据在 Google 上的搜索,它应该适用于这些 web.config 更改。请帮助解决问题。

谢谢

【问题讨论】:

你试过这里提到的 - asp.net/web-api/overview/security/… 吗? 不,我关注了这篇文章:codeproject.com/Articles/617892/… 为什么不按照官方文档呢?试试这个。 实际上它在本地主机上的 IIS 上工作,这就是为什么没有尝试。官方链接我会试试的 我现有的应用程序目标框架4.0和需要安装的nuget包需要4.5。需要进行很多更改。仍然无法理解为什么 web.config 更改在服务器上不起作用 【参考方案1】:

花了一整天的时间终于解决了这个问题,点击了“Yaser”发布的链接。

但我想说这不容易这就是我在这里提到步骤的原因。

    首先,我们需要通过 Nuget "Install-Package Microsoft.AspNet.WebApi.Cors" 安装包,但如果您的目标框架是 4.0,则无法安装它。首先通过右键单击 Project => Properties 转换为 4.5,然后在应用程序选项卡中选择 framework 4.5

    另一个问题是大多数 dll 在更改框架版本后将无法工作,再次右键单击解决方案并选择管理 Nuget 包并全部更新。 (在执行此操作之前备份您的项目)

    如果一切正常,您只需一步之遥 - 在 app_start 文件夹下的 webapiconfig.cs 中添加以下行

    config.EnableCors();

打开 API 控制器后,在控制器级别添加以下行

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


最后一步在生产服务器上更改您的 web.config 添加以下行(与 localhost web.config 比较)

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>

所有人都进行新的构建并将所有的 bin 文件替换为新的........ :)

谢谢

【讨论】:

以上是关于MVC Web API - CORS 策略不起作用的主要内容,如果未能解决你的问题,请参考以下文章

C# WEB API CORS 不起作用

Cors 在 web api2 项目中不起作用

CORS 在 ASP.NET Web API 2 应用程序中不起作用

带有 CORS 和 Angular 的 .NET Web API 2 在第一篇文章中不起作用

CORS 不起作用 MVC6 - RC1

CORS 不适用于从 Ajax 到 ASP.NET Core Web API 的调用