首页 > 编程语言 >c# Framwork4.5 添加webapi处理跨域请求问题

c# Framwork4.5 添加webapi处理跨域请求问题

时间:2024-04-09 17:55:06浏览次数:34  
标签:webapi Framwork4.5 跨域 预检 Response config OPTIONS 请求

 

常用2种方式 

1) web.config

允许所有来源,HTTP方法,请求标头跨域:
  后端,在Web.config中找到<system.webServer>标签,里面添加配置如下:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Headers" value="*" />
    <!--<add name="Access-Control-Allow-Headers" value="Content-Type,Token" />-->
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
</httpProtocol>

修改上述问题后,某些请求还是会报错:has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: It does not have HTTP ok status

前端js会报 "Method Not Allowed" 405 错误

原因:

带有[FormQuery] 参数或无参的请求调用正常,带有[FormBody]即json参数的请求会报上述错误。

这里是与预检(options)请求的问题。

后台方法允许OPTIONS请求,但是一些配置文件(如安全配置)阻止了OPTIONS请求,就会导致上述错误

需要在后端加上预检请求过滤——只要是预检请求,都返回success,再正常接收后续请求

后端,在Global.asax文件添加配置如下:

/// <summary>
        /// 跨域设置(响应预检Options请求)
        /// </summary>
        protected void Application_BeginRequest()
        {
            //OPTIONS请求方法的主要作用(预请求,判断是否能够请求成功):
            //用来检查服务器的性能。如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
            if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
            {
                //表示对输出的内容进行缓冲,执行page.Response.Flush()时,会等所有内容缓冲完毕,将内容发送到客户端。
                //这样就不会出错,造成页面卡死状态,让用户无限制的等下去
                //Response.StatusCode = 204;
                Response.Flush();
            }
        }:

 

 

 

2)WebApiConfig.cs

 //config.EnableCors();
            config.EnableCors(new EnableCorsAttribute("*", "*", "*")
            { SupportsCredentials=true });

 

标签:webapi,Framwork4.5,跨域,预检,Response,config,OPTIONS,请求
From: https://www.cnblogs.com/qingjiawen/p/18124473

相关文章

  • .NetCore在跨域时设置自定义响应头的注意事项
      现在B/S开发基本都是前后端分离的方式了吧,那么这往往会涉及到一个跨域的问题,为了安全,跨域访问往往做了很多的限制,这里对跨域时自定义响应头做个笔记。  当我们在.NetCore的后端给请求添加了一个自定义的响应头的时候,通过api调用,响应头完美的返回:  publicclassHome......
  • ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
    ASP.NETMVCWebApi接口返回JOSN日期格式化dateformat全局配置WebApiConfigpublicstaticclassWebApiConfig{publicstaticvoidRegister(HttpConfigurationconfig){//WebAPI配置和服务//WebAPI路由config.MapHttpAttributeRoutes......
  • 网站使用CDN出现ttf woff等字体跨域问题解决方案
    如果cdn域名+资源路径是可以通过浏览器url地址栏打开的那么一般是因为nginx配置的原因,找到nginx的配置文件添加以下代码:# 允许指定域名访问;location ~ .*.(eot|ttf|ttc|otf|eot|woff|woff2|svg)(.*) { add_header Access-Control-Allow-Origin http(s)://......
  • JS——webAPIs(6)
    一、知识点1.正则表达式的使用//正则表达式:用于匹配字符串中字符组合的模式conststr='学习前端'//定义规则constreg=/前端///进行查找-两个方法//用于判断是否有符合规则的字符串,返回布尔值console.log(reg.test(str));//用于......
  • Java解决跨域问题
    importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.CorsRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcCo......
  • 跨域资源共享 CORS
    跨域资源共享CORS 概述如果需要在前端与不同域的后端进行通信,可以在后端配置CORS,允许指定的域名访问后端资源。开始通过配置合适的响应头,可以明确指定允许的来源域、请求方法和头部信息。Node.jsapp.all('*',function(req,res,next){res.header("Access-Control......
  • 记录一次解决跨域问题解决过程。 strict-origin-when-cross-origin,net::ERR_FAILED, No
    事情是这样的,vue项目本地启动可以正常连接后端端口访问,部署到nginx上只有就无法访问,显示跨域问题  于是查看后端日志 啥都没有,觉得肯定是nginx的问题,怎么配置都没用, location/{ roothtml; indexindex.htmlindex.htm; add_header'Access-Control-Allow-O......
  • 视频监控/云存储/AI智能分析平台EasyCVR集成时调用接口报跨域错误的原因排查
    EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标GB/T28181协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK......
  • .net core webapi统一修改日期时间的返回格式
    在写WebApi时,我们的日期时间往往是DateTime类型,如果直接返回,前端拿到的结果有可能会是这种格式:下面是如何将返回的DateTime字段统一改成自定义的格式首先创建一个自定义的JSON序列化器,定义一个继承System.Text.Json.Serialization.JsonConverter的类,实现Read和Write两个抽象方......
  • socket.io 跨域 cors.origin 的值,用于解决跨域问题
    在使用socket.io库时,对于实现跨域资源共享(CORS:Cross-OriginResourceSharing)的配置,您需要设置服务器的CORS选项来允许特定来源的请求或所有来源的请求。当创建或配置socket.io服务器时,CORS相关的设置通常是在初始化服务器时作为选项提供的。下面是几种不同的socke......