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 策略不起作用的主要内容,如果未能解决你的问题,请参考以下文章
CORS 在 ASP.NET Web API 2 应用程序中不起作用