5

我正在尝试将 CORS 支持与 Web API 一起使用,并且已经安装了 RC1。我浪费了很多时间试图让 CORS 正常工作。无论如何,我启用了 Nightly 构建但无济于事。我不断收到以下问题,在网上的任何地方都找不到解决方案。您是否需要 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>
4

3 回答 3

3

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

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

我已经使用 MVC4 和 VS2012 时代的 Web API 版本在 VS2012 中获得了这些替代方法。

于 2014-01-06T20:10:27.193 回答
0

您无需 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 工具 2013.1

希望这可以帮助。

于 2014-01-01T05:27:07.093 回答
0

您只需添加适当的标头即可在单个控制器上启用 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 或新包。

于 2014-03-17T09:29:54.540 回答