MVC Web API 5 升级以获得 CORS 支持

本文关键字:CORS 支持 Web API MVC | 更新日期: 2023-09-27 18:35:42

我正在尝试将CORS支持与Web API一起使用,并安装了RC1。我浪费了很多时间试图让 CORS 正常工作。无论如何,我已经启用了夜间构建,但无济于事。我不断遇到以下问题,但在网上任何地方都找不到解决方案。您是否需要 2013 VS 来玩 MVC 5 或安装任何新内容?

Could not load type 'System.Web.Http.Hosting.IHostPrincipalService' from assembly 'System.Web.Http, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

这是我的包文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.4.1.9004" targetFramework="net45" />
  <package id="AutoMapper" version="3.0.0-ci1043" targetFramework="net45" />
  <package id="AutoMapper" version="3.0.0" targetFramework="net45" />
  <package id="EntityFramework" version="5.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Cors" version="5.1.0-alpha1-131016" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc" version="5.0.0-rc1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Providers.Core" version="1.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Providers.LocalDB" version="1.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="3.0.0-rc1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="5.0.0-rc1" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.1.0-alpha1-131016" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.1.0-alpha1-131016" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Cors" version="5.1.0-alpha1-131016" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.OData" version="5.0.0-rc1" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.0.0-rc1" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages" version="3.0.0-rc1" targetFramework="net45" />
  <package id="Microsoft.Data.Edm" version="5.6.0" targetFramework="net45" />
  <package id="Microsoft.Data.OData" version="5.6.0" targetFramework="net45" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="5.0.6" targetFramework="net45" />
  <package id="NodaTime" version="1.1.1" targetFramework="net45" />
  <package id="System.Spatial" version="5.6.0" targetFramework="net45" />
  <package id="WebGrease" version="1.1.0" targetFramework="net45" />
  <package id="WebGrease" version="1.5.2" targetFramework="net45" />
</packages>

MVC Web API 5 升级以获得 CORS 支持

除了使用 ASP.NET CORS Nuget 包之外,还有其他方法可以在服务器端启用 CORS。 您可以手动将 CORS 标头添加到响应中(例如,通过编写自定义 Web API 消息处理程序,或使用其他代码机制向响应添加标头),也可以使用 web.config 添加标头:

使用 CORS Nuget 包可能是推荐的方法(一旦实际发布 5.1+ 版本),但这不是唯一的方法。

我已经让这些替代方法使用 MVC4 和 VS2012 时代的 Web API 版本在 VS2012 中工作。

你不需要有VS 2013来使用MVC 5/Web API 2。您可以将其与VS 2012一起使用。

尝试将所有包更新到 RTM 版本,并查看以下有关升级到 MVC 5 和 Web API 2 的文章。

要将 MVC 5 和 Web API 2 与 VS 2012 配合使用,您需要安装 Visual Studio 2012 的 ASP.NET 和 Web Tools 2013.1

希望这有帮助。

只需添加适当的标头,即可在单个控制器上启用 CORS:

// allow the browser to send cross-origin requests
Response.AppendHeader("Access-Control-Allow-Origin", "http://foo.com");
// optional: allow the browser to send cookies with the request
Response.AppendHeader("Access-Control-Allow-Credentials", "true");

无需 MVC 5 或新软件包。