首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法启用针对netcoreapp3.0的ASP.NET核心WebApp中特定API控制器的CORS

无法启用针对netcoreapp3.0的ASP.NET核心WebApp中特定API控制器的CORS
EN

Stack Overflow用户
提问于 2019-08-21 13:20:07
回答 1查看 3.8K关注 0票数 2

我试图在ASP.NET核心应用程序中为特定的API控制器启用CORS。首先,我安装了NuGet包,并将其添加到我的.csproj

代码语言:javascript
复制
<PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.2.0" />

然后,在我的ConfigureServices中添加以下内容

代码语言:javascript
复制
services.AddCors(options => {
    options.AddPolicy("AllowAll", builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
});

在此之后,如果我将它添加到我的Configure中,它就会工作:

代码语言:javascript
复制
app.UseCors("AllowAll");

然而,这为所有控制器启用了CORS。我只想为SessionApiController启用它。如果我将EnableCorsAttribute添加到控制器中:

代码语言:javascript
复制
[Route("api/session")]
[EnableCors("AllowAll")]
[ApiController]
public class SessionApiController : Controller {
    [...]

    [Route("init")]
    public JsonResult InitSession() {
        [...]
    }
}

..。它不起作用,当我试图访问/api/session/init端点时,Chrome给了我一个CORS错误(“请求的资源上没有‘访问-控制-允许-原产地’报头”)。我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-27 12:47:00

考虑到以下ASP.NET核心WebApp:

App.csproj:

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.2.0" />
  </ItemGroup>
</Project>

Startup.cs提取液

代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services) {
        services.AddCors(options => {
            options.AddPolicy("AllowAll", builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
        });

        services.AddControllers();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
        app.UseCors();  // Doesn't work
        //app.UseCors("AllowAll");  // Works

        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints => {
            endpoints.MapControllers();
        });
    }

从要在其中应用AllowAll策略的控制器中提取:

代码语言:javascript
复制
[EnableCors("AllowAll")]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase

为了在其中正确应用CORS,需要将以下更改应用到代码中,如迁移MS文档中所述

  1. 删除套餐,在您的例子中是Microsoft.AspNetCore.Cors。这将导致您的.csproj如下所示:

netcoreapp3.0

  1. 仔细遵循msdocs中的中间件迁移通知作为,顺序很重要!。这将导致Startup#Configure如下所示: 在netcoreapp2.2中(IApplicationBuilder app,IWebHostEnvironment env) { app.UseRouting();// AFAIK这不是使用属性的CORS所必需的。//这是必需的,因为如果不给//默认的CORS策略应用app.UseCors();if (env.IsDevelopment()) { app.UseDeveloperExceptionPage();} app.UseHttpsRedirection();app.UseAuthorization();app.UseEndpoints(端点=> { endpoints.MapControllers();});}app.UseEndpoints(端点=>{endpoints.MapControllers();});}app.UseEndpoints(端点=>{endpoints.MapControllers();});}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57592654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档