cors c# web API react

Posted

技术标签:

【中文标题】cors c# web API react【英文标题】: 【发布时间】:2021-09-02 01:08:11 【问题描述】:

(我的英文不好) 您好,所以当我在我的服务器上有我的 Web API 然后尝试从我的主 PC 使用我的反应网站时,我遇到了问题,我得到 Cors 错误。当我在我的主电脑上同时运行我的 webAPI 和我的反应时,它会工作,但需要它从服务器上工作,因为我们有几个人在上面工作。

我希望有人可以帮助我。

错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://ServerIP/api/user. (Reason: CORS request did not succeed).

我尝试了一些不同的方法,例如添加:

public static void ConfigureServices(IServiceCollection services)

    services.AddCors(options => options.AddDefaultPolicy(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));

然后当这不起作用时,我尝试修复终点

app.UseEndpoints(endpoints =>

    endpoints.MapControllerRoute(
        name: "default",
        pattern: "controller/action=Index/id?"
    );
    endpoints.MapControllers();
);

还尝试在我们的两个控制器类前面添加这个

[EnableCors("*", "*", "*")]

这就是 React 的样子:

import Axios from 'axios'

const WorkifyAPI = Axios.create(
    baseURL: 'https://ServerIP:42069/api'
)

export default WorkifyAPI

反应服务:

import http from '../WorkifyAPI'
const GetallWorkouts = (userID: string) => 
    return http.get(`/user/$userID/WorkoutData`)


export default 
    GetallWorkouts,

编辑: starup.cs 目前的样子

    public class Startup
    
        public Startup(IConfiguration configuration)
        
            Configuration = configuration;
        

        public IConfiguration Configuration  get; 

        // This method gets called by the runtime. Use this method to add services to the container.
        public static void ConfigureServices(IServiceCollection services)
        
            services.AddCors();

            services.AddControllers();

        

        public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "controller/action=Index/id?");
                endpoints.MapControllers();
            );
        
    

当我在 Chrome 中运行我的 React 时,我得到了这个错误: net::ERR_CERT_AUTHORITY_INVALID 正如@sideshowbarker 所说,这与 SSL 相关,所以会检查一下

这是来自 Devtool (?) 的请求

【问题讨论】:

您使用的是哪个 dotnet 版本? 据我所见,代码是正确的。我有一个类似的问题,原来反向代理正在剥离 CORS 标头。也许你的情况也是这样? “CORS 请求未成功”实际上表明问题与 CORS 无关。我的字面意思是浏览器未能成功完成请求。或者换句话说,这意味着事务从未到达服务器实际响应的点。它通常表示 SSL 失败。见developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/…。 我认为 sideshowbarker 和 Mekroebo 可能是正确的,并且该问题与前端应用程序或后端应用程序配置无关。您应该在 Web 开发人员工具中显示实际请求。 42069 端口为https://ServerIP:42069 调用https 很可能是代理的指示。在这种情况下,配置 ssl 代理(和/或在这方面处理客户端设置)可能是前进的道路 【参考方案1】:

ConfigureServices 函数中声明 AddCors() 和在 Configure 函数中声明 UseCors() 对我有用。 应该是这样的:

public void ConfigureServices(IServiceCollection services) 
    services.AddCors();


public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());

Configure 函数的更改取决于版本,但这应该可以工作。

【讨论】:

@Tehpson 能否提供设置 cors 的完整代码?【参考方案2】:

尝试做这样的事情:

 services.AddCors(action =>
                action.AddPolicy("AllowOrigins", builder =>
                    builder
                        //.WithOrigins("http://localhost:4200")
                        .SetIsOriginAllowed((host) => true)
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials()
                )
            );

你的:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime applicationLifetime)
        
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            

            app.UseCors("AllowOrigins");


【讨论】:

以上是关于cors c# web API react的主要内容,如果未能解决你的问题,请参考以下文章

cors c# web API react

框架从 4.5.2 升级到 4.7.2 后 C# Web API 引发 CORS 错误

c# Web Api 启用了 CORS 并且请求的资源上不存在可怕的 No 'Access-Control-Allow-Origin' 标头

Azure 移动服务 Web Api 上的 SignalR CORS

C# Net Core:在 API 中启用 Cors 后,仍处于 CORS 策略阻止状态

CORS 问题:C# API 请求适用于一个域,但不适用于另一个域