怎么在webapi中使用会话实现跨域

  介绍

这篇文章给大家介绍怎么在webapi中使用会话实现跨域,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在之前的项目中,我们设置跨域都是直接在网络。配置中设置的。

怎么在webapi中使用会话实现跨域

这样是可以实现跨域访问的。因为我们这边一般情况下一个之前会有多个网站,小程序,微信公众号等访问,所以这样设置是没有问题的。但是……如果其中一个网站需要用到饼干或会话者的时候,

Access-Control-Allow-Origin如果还是设置成“*”就会报错,当然是前端报错……数据返回还有饼干/会话都还是能存,但是报错就不爽了啊。

于是,想着整改一下。

先上前端代码。来个页面远程ajax请求去设置会话。啥都没有,就是点按钮,发个请求。标记地方是必须加的

@ {   ViewBag.Title =,才能“TestSetSession";   }      & lt; h3> TestSetSession      & lt; button  onclick=凹?)“祝辞设置session      {@section 脚本   & lt; script  src=皛/脚本/jquery-1.10.2.min.js"祝辞& lt;/script>   & lt;才能script>   ,,,function 设置(),{   ,,,,,. ajax({美元   ,,,,,,,url:,“http://localhost: 1338/api/测试/SetSession ?会话=1234567 fdsdfghjhgfds"   ,,,,,,,数据类型:,“json"   ,,,,,,,xhrFields:, {   ,,,,,,,,,withCredentials:真实   ,,,,,,,},   ,,,,,,,crossDomain:,真的,   ,,,,,,,数据:,{},   ,,,,,,,类型:,“post",   ,,,,,,,成功:,function (数据),{   ,,,,,,,,,警报(data.message)   ,,,,,,,},   ,,,,,,,错误:,function  (), {   ,,,,,,,,,警报(& # 39;服务器发生错误! & # 39;);   ,,,,,,,}   ,,,,,});   ,,,}   & lt;才能/script>   }

然后再来个页面,获取上个页面设置的会话。

@ {   ViewBag.Title =,才能“TestGetSession";   }      & lt; h3> TestGetSession   & lt; button  onclick=癎et(),在获取session      {@section 脚本   & lt; script  src=皛/脚本/jquery-1.10.2.min.js"祝辞& lt;/script>   & lt;才能script>   ,,,function 得到(),{   ,,,,,. ajax({美元   ,,,,,,,url:,“http://localhost: 1338/api/测试/GetSession"   ,,,,,,,数据类型:,“json"   ,,,,,,,xhrFields:, {   ,,,,,,,,,withCredentials:真实   ,,,,,,,},   ,,,,,,,crossDomain:,真的,   ,,,,,,,数据:,{},   ,,,,,,,类型:,“get",   ,,,,,,,成功:,function (数据),{   ,,,,,,,,,警报(“会话:“,+,data.data.session_state  +,“,饼干:“,+,data.data.cookie);   ,,,,,,,},   ,,,,,,,错误:,function  (), {   ,,,,,,,,,警报(& # 39;服务器发生错误! & # 39;);   ,,,,,,,}   ,,,,,});   ,,,}   & lt;才能/script>   }

后台代码

1。先允许webapi使用会话

在全球中加入如下代码

public  override  void  Init ()   ,,,{   ,,,,,PostAuthenticateRequest  +=, MvcApplication_PostAuthenticateRequest;   ,,,,,base.Init ();   ,,,}      ,,,void  MvcApplication_PostAuthenticateRequest (object ,发送方,EventArgs  e)   ,,,{   ,,,,,System.Web.HttpContext.Current.SetSessionStateBehavior (   ,,,,,,,System.Web.SessionState.SessionStateBehavior.Required);   ,,,}

2。允许跨域。我这里使用的是Microsoft.AspNet.WebApi.Cors

先安装包,然后在WebApiConfig中加入如下代码。等同于在网络上。配置中设置

,//允许跨域   config.EnableCors才能(new  EnableCorsAttribute (“*”,,“*”,,“*“));

在请求方法上打上[EnableCors]标签,特指某一些域名的访问需要饼干/会话

[EnableCors (“http://localhost: 6477, http://localhost: 6478,,,“*”、“*“))   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在webapi中使用会话实现跨域