在 ASP.NET 5 和 MVC 6 中启用跨域请求 (CORS)

Posted

技术标签:

【中文标题】在 ASP.NET 5 和 MVC 6 中启用跨域请求 (CORS)【英文标题】:Enable cross-origin requests (CORS) in ASP.NET 5 & MVC 6 【发布时间】:2015-10-29 07:44:11 【问题描述】:

我正在尝试在我的 MVC 6 WebApi 项目中启用 CORS,我发现了这个问题,专注于同样的问题: How do you enable cross-origin requests (CORS) in ASP.NET 5 & MVC 6?

看起来和我想做的一模一样,但是当我到达这部分时,我遇到了麻烦。

public void ConfigureServices(IServiceCollection services)

    services.AddMvc();
    //Add Cors support to the service
    services.AddCors();

    var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy();

    policy.Headers.Add("*");    
    policy.Methods.Add("*");          
    policy.Origins.Add("*");
    policy.SupportsCredentials = true;

    services.ConfigureCors(x=>x.AddPolicy("mypolicy", policy));


public void Configure(IApplicationBuilder app, IHostingEnvironment  env)

    // Configure the HTTP request pipeline.

    app.UseStaticFiles();
    //Use the new policy globally
    app.UseCors("mypolicy");
    // Add MVC to the request pipeline.
    app.UseMvc();

它(以及我发现的有关此主题的任何其他资源)明确指出我应该在Startup.cs 文件的Configure 方法中使用app.UseCors("policyname")。 但是当我这样做时,我收到以下错误:

'IApplicationBuilder' does not contain a definition for 'UseCors' and no extension method 'UseCors' accepting a first argument of type 'IApplicationBuilder' could be found (are you missing a using directive or an assembly reference?)

我知道这是 MVC 6 中的一个全新功能,也许这可以解释为什么我无法找到任何有关如何实现此功能的官方文档。

是否可以像添加正确的 NuGet 包一样简单? 我尝试了几个 Microsoft 的与 CORS 相关的 .Net NuGet 包,但都没有解决问题,我怀疑它们与旧版本的 WebApi 有关。

【问题讨论】:

【参考方案1】:

在此添加

using Microsoft.AspNet.Builder;

并确保你的 project.json 文件中有包

Microsoft.AspNet.Cors.Core

这是扩展程序的图像

【讨论】:

我的项目使用的是 Beta4,所以除非他们再次更改命名空间(他们一直在这样做),否则应该是正确的。 奇怪,Microsoft.AspNet.Cors.Core (1.0.0-beta6) 没有解决问题,但 Microsoft.AspNet.Cors (1.0.0-beta5) 解决了。 看起来像一些命名空间更改。只需确保 DNX 和所有软件包都是相同的 beta 版本。例如 beta4 不适用于 beta6 等。 我所有其他的 beta 包都是 beta6,但 Microsoft.AspNet.Cors 仅在 beta5 中可用:-/ - 它在最终版本中可用 5.2.3 但如果我使用那个,问题就来了回来,所以现在beta5 似乎是最好的选择,即使我不喜欢混合测试版本。-我尝试添加最终的Microsoft.AspNet.Cors 和 beta6 Microsoft.AspNet.Cors.Core,但这也没有解决问题.到目前为止,似乎只有没有 .Core 的 Microsoft.AspNet.Cors beta5 可以工作。 奇怪,我只是尝试将 1.0.0-beta5 更改为 1.0.0-beta6Microsoft.AspNet.Cors 并且它有效。现在我有 macing beta 版本,并且没有错误消息。猜猜 IntelliSense 并不总是正确的 ;-)

以上是关于在 ASP.NET 5 和 MVC 6 中启用跨域请求 (CORS)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.Net MVC 6 中编辑和继续

从 GitHub 持续部署在 Azure 中失败(ASP.NET 5 和 MVC 6)

如何在 ASP.NET 5 MVC 6 (vNext) 中定义 Identity 的密码规则?

asp.net mvc 文件跨域上传,接收返回结果

在 ASP.NET Webforms 中启用跨域请求

如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x