栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

前后端分离 Ajax Post复杂请求跨域,后端.NET WebApi 支持跨域及session

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

前后端分离 Ajax Post复杂请求跨域,后端.NET WebApi 支持跨域及session

1、跨域原因 这个不用多解释 无非就是ip+端口 前后端有其中一个不匹配就会跨域。如(S:http://127.0.0.1:81,C:http://127.0.0.1:82)

2、要解决的问题:

2.1、简单post请求后可正常访问,复杂post请求,不能进入后端服务!

2.2、复杂post请求 session丢失!

先给出可运行的解决方案:

3.1、ajax前端代码

t.ajax(t.extend({
				type: "post",
				dataType: "json",
                //运行跨域
				crossDomain: true,
				//头部授权需要开启 如cookie token
                xhrFields: {
					withCredentials: true
				},
                //自定义hander头
				beforeSend: function(request) {
					request.setRequestHeader('custom-request-type', 'xxxx-ajax');
				},
				success: function(t) {
				},
				error: function(e, t) {
				}
			}, e))

3.2、net web.config

 
    
      
        
        
          
          
          
        
      
    
    
      
        
        
        
        
        
        
        
        
        
        
         
        
      
    
  

上面的操作后,即可解决2.1、2.2所述问题。

其中单独补充说明:浏览器的同源策略,就是出于安全考虑,浏览器会限制从脚本发起的跨域HTTP请求(比如异步请求GET, POST, PUT, DELETE, OPTIONS等等),所以浏览器会向所请求的服务器发起两次请求,第一次是浏览器使用OPTIONS方法发起一个预检请求,如果未添加或允许通过方法没有它,请求便不会进入服务端。第二次才是真正的异步请求,第一次的预检请求获知服务器是否允许该跨域请求:如果允许,才发起第二次真实的请求;如果不允许,则拦截第二次请求。

 

可优化处理服务端:

未发布的客户端,请求地址各不相同。便可以把配置文件放到Global.asax.cs中,如下:

protected void Application_BeginRequest()
        {
            if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
            {
                Response.Headers.Add("Access-Control-Allow-Origin", Request.Headers.Get("Origin"));
                Response.Flush();
            }
        }

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906371.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号