ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

彻底解决Asp.netCore WebApi 3.1 跨域时的预检查204 options重复请求的问题

2021-02-20 14:34:09  阅读:220  来源: 互联网

标签:WebApi Exceptionless Asp 跨域 中间件 Configuration options 204


Asp.netCore WebApi 3.1 跨域的预检查options问题

1:我们直接使用core跨域的中间件 ,注入跨域服务,

services.AddCors(options =>
            {
                // CorsPolicy 是自訂的 Policy 名稱
                options.AddPolicy("CorsPolicy", policy =>
                {
                    policy.SetPreflightMaxAge(TimeSpan.FromSeconds(1800L));//update by jason
                    policy.AllowAnyOrigin()
                          .AllowAnyHeader()
                          .AllowAnyMethod();
                });
            });

2:在confing里面使用跨域的中间件

   public void Configure(IApplicationBuilder app, IWebHostEnvironment env, TaskListService taskListService)
        {
            //Exceptionless日志
            var isEnableLogger = Convert.ToBoolean(Configuration.GetSection("Exceptionless:Enabled").Value ?? "false");

            if (isEnableLogger)
            {
                // 封装使用Exceptionless分布式日志组件
                ExceptionlessClient.Default.Configuration.ApiKey = Configuration.GetSection("Exceptionless:ApiKey").Value;
                // Exceptionless传输地址
                ExceptionlessClient.Default.Configuration.ServerUrl = Configuration.GetSection("Exceptionless:ServerUrl").Value;
                ExceptionlessClient.Default.SubmittingEvent += OnSubmittingEvent;
                app.UseExceptionless();
            }

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            }
            app.UseCors("CorsPolicy");
*****
}

3:效果截图:

 

 

4: 后来多加了一行code:   policy.SetPreflightMaxAge(TimeSpan.FromSeconds(1800L)); 

     效果:第一次请求会存在204,下一次相同的url没有发现204的请求,其实就是给缓存了起来,但是不符合预期,

5:自己手写一个全局的过滤器,问题解决OK,去掉了多余的204预检请求

    public class FEGCrosFilter : IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext context)
        {
        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            context.HttpContext.Request.Headers.Add("Access-Control-Allow-Headers", "*");
        }
    }

6:注入全局的过滤器

7:查看效果

8:小结

这个问题一直困扰了我好久,之前在网络上找了很多的相关资料都没有解决,今天终于解决了,很开心。

最后(之前的跨域中间件其实也可以去掉了,但是考虑到其他的http和https网站都有调用该项目的接口,先观察一段时间再做进一步打算),

感觉这个中间件是否存在一些bug?不然为啥非要多一次options 204的预检,重复多余的请求会严重影响服务器的性能!牛年大吉大利!欢迎大家留言讨论请教。

 

标签:WebApi,Exceptionless,Asp,跨域,中间件,Configuration,options,204
来源: https://www.cnblogs.com/Fengge518/p/14420728.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有