.net core 3.1 webapi解决跨域问题 GET DELETE POST PUT等


最近在弄一个项目,后端是.net core 3.1写的。 CORS也按照 官方文档 https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-5.0 进行了配置。但是依然阻挡不了 DELETE,PUT 等方法出现的 CORS跨域问题。

下面来说一下我是如何解决的:

首先在startUp里配置好。

全局: readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

然后是ConfigureService 方法:
  public void ConfigureServices(IServiceCollection services)
        {
            //cors
            string[] corsUrl = Configuration.GetSection("ApplicationSettings:Cors").Get<string[]>();
            services.AddCors(options =>
            {
                options.AddPolicy(name: MyAllowSpecificOrigins,
                    builder =>
                    {
                        builder
                .WithOrigins(corsUrl)
                .WithMethods("PUT", "DELETE", "GET","POST","PATCH")
                .SetIsOriginAllowed((host) => true)
                        .AllowAnyMethod()
                        .AllowCredentials()
                        .AllowAnyHeader();
            });
            });
            services.AddControllers();

然后是configure方法:

  app.UseRouting();
            //官網要求写在user Routing后,useAuthorization前.
            app.UseCors(MyAllowSpecificOrigins);

            app.UseAuthentication();

...........

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

这么配置好后,仍然是不行的。 GET 是好用的,但是DELETE等 还是报CORS错误。

下面高能,真正的解决方法来了:

修改发布文件的 web.config文件:

<?xml version="1.0" encoding="utf-8"?>

  "." inheritInChildApplications="false">
    
      
        "WebDAVModule" />
      
      
        "aspNetCore" />
        "WebDAV" />
        
        "ExtensionlessUrlHandler-Integrated-4.0" />
        "OPTIONSVerbHandler" />
        "TRACEVerbHandler" />
        "aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      
      "dotnet" arguments=".\Jp.Api.Management.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    
  

重要的是加粗部分,这个是之前没有的,有国外网友说是 "WebDAVModule"的问题。

好了,.net core3.1的CORS跨域问题至此全部解决。