MVC Web API - CORS策略不起作用

时间:2015-08-21 05:12:56

标签: asp.net-mvc api asp.net-mvc-4 cors

我在现有的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更改。请帮助解决问题。

由于

1 个答案:

答案 0 :(得分:0)

最后花了整整一天后才解决了这个问题,接着是“Yaser”发布的链接。

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

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

  2. 另一个问题是更改框架版本后,大多数dll都无法工作,再次右键单击解决方案并选择Manage Nuget Package并更新所有内容。 (在此之前收回你的项目)

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

    <强> config.EnableCors();

  4. 之后打开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文件替换所有bin文件........:)

    由于