WebApi 能支持Session
由于项目实际需要,我希望让WebApi服务也能支持Session,所以便查找资料按照网上的方法开始着手实验。
然后就有了以下的代码,主要是说让WebApi支持Session,要重写Global.asax的Init方法
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configuration.EnableCors();
GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonpMediaTypeFormatter());
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); } public override void Init()//重写这个方法
{
PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
base.Init();
} private void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
} }
重写方法后,准备动手编写测试的Controller代码 如下,很简单的几句代码,A方法模拟第一次请求将携带的参数存入Session,其中键和值都为传入的参数appid,B方法是返回键为appid的session的值。
public class GetDataController : ApiController
{ [HttpGet]
public void A(string appid)
{ System.Web.HttpContext.Current.Session[appid] = appid;
System.Web.HttpContext.Current.Session.Timeout =1;
}
[HttpGet]
public ResponseData B(string appid)
{ return new ResponseData() { data = System.Web.HttpContext.Current.Session[appid].ToString(), isSuccess = true };
}
}
用谷歌浏览器,模拟A\B两个请求,实验成功!!!!!很是高兴!!
但问题来了,通过浏览器运行可以取到session的值,但是在手机的移动设备端,访问居然每次获取session的值都是null,有些不解,便开始寻找问题的根源所在,为什么浏览器正常,然而在移动设备模拟就不行了呢?????? 功夫不负有心人,终于找到了问题所在,大概原因就是说,session是靠一个的cookie来区分的,客户端每次访问要携带这个cookie才能保持session的状态。于是我便用控制台模拟移动端进行测试。代码如下:
class Program
{
static void Main(string[] args)
{ GetMethod("http://192.168.1.9:8828/api/GetDAta/A?appid=abc"); // PostMethod("http://localhost:8828/api/GetDAta/Login/");
Console.ReadKey();
GetMethodTest("http://192.168.1.9:8828/api/GetDAta/b?appid=abc");
Console.ReadKey();
}
private static CookieContainer m_Cookie = new CookieContainer();
private static void GetMethod(String url)
{ HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = m_Cookie;
string cookieheader = request.CookieContainer.GetCookieHeader(new Uri(url));
m_Cookie.SetCookies(new Uri(url), cookieheader);
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{ StreamReader reader = new StreamReader(response.GetResponseStream());
Console.WriteLine(reader.ReadToEnd());
} }
private static void GetMethodTest(String url)
{ HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = m_Cookie;
m_Cookie = request.CookieContainer;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{ StreamReader reader = new StreamReader(response.GetResponseStream());
Console.WriteLine(reader.ReadToEnd());
} }
}
GetMethod为模拟访问A服务,其中以下代码,就是在访问A的时候设置cookie
request.CookieContainer = m_Cookie;
string cookieheader = request.CookieContainer.GetCookieHeader(new Uri(url));
m_Cookie.SetCookies(new Uri(url), cookieheader);
GetMethodTest为模拟访问B服务,请求时候需要携带上次访问A的cookie的信息,代码如下
request.CookieContainer = m_Cookie;
m_Cookie = request.CookieContainer;
到此,一切测试完毕,正常运行。
初学webapi,哪有不对,希望园友多多指教!!!!!!!
WebApi 能支持Session的更多相关文章
- .net webapi项目中支持session
webapi中默认是不支持session的开启的 需要在Global.asax文件中,添加如下代码 public override void Init() { this.PostAuthenticat ...
- WebApi中使用session
webapi默认是不支持session的,要通过一些手动配置来开启Session功能 在Global.asax里添加: 导入命名空间: using System.Web.SessionState; p ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- WebApi 中使用 Session
1. 在 Global.asax.cs 文件中加入session支持 protected void Application_Start() { AreaRegistration.RegisterAll ...
- .net webapi 中使用session是出错 HttpContext.Current.Session==null
最近在写.net webapi时发现 HttpContext.Current.Session==null ,导致报错,后来查资料发现webapi中使用session时首先需要开启session功能, ...
- ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
WebAPI应用支持HTTPS的经验总结 在我前面介绍的WebAPI文章里面,介绍了WebAPI的架构设计方面的内容,其中提出了现在流行的WebAPI优先的路线,这种也是我们开发多应用(APP.微信. ...
- .net WebService方法之重载、支持Session、支持request请求和response格式的浅析
.net的webservice不支持web方法的重载,但是可以通过设置WebMethod属性的MessageName字段来达到重载web方法的目的. 通过设置WebMethod属性的EnableSes ...
- WebAPI支持Session
1.在App_Start/WebApiConfig.cs中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它: public class ...
随机推荐
- bzoj2965
http://www.lydsy.com/JudgeOnline/problem.php?id=2965 http://www.tsinsen.com/A1385 平面图网络流. 首先我们要将平面图转 ...
- 使用Python做科学计算初探
今天在搞定Django框架的blog搭建后,尝试一下python的科学计算能力. python的科学计算有三剑客:numpy,scipy,matplotlib. numpy负责数值计算,矩阵操作等: ...
- hdu 5423 Rikka with Tree(dfs)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- Python 中文报错 SyntaxError: Non-ASCII character解决办法
只需要在最顶部的位置加上 #-*- coding:utf-8 -*- 就行了. 如果还是没有好,打开设置并搜索file encoding并作如图修改便好.
- git 技巧
将某个文件回退到某个版本 git co d359624286d9c1f022b8b3b6f2d3fe3b6524188b build.sh 查看某个文件在某个版本时的内容 git show d3596 ...
- python scrapy 基础
scrapy是用python写的一个库,使用它可以方便的抓取网页. 主页地址http://scrapy.org/ 文档 http://doc.scrapy.org/en/latest/index.ht ...
- C# 初识Ref和Out
首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ...
- Android 自定义控件 优雅实现元素间的分割线 (支持3.0以下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42407923 ,本文出自:[张鸿洋的博客] 1.概述 话说,随着Android ...
- javasscript学习笔记 之 数组学习二 数组的所有方法
1.push() 和 pop() 栈的方法 后进先出 push() 该方法是向数组末尾添加一个或者多个元素,并返回新的长度. push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返 ...
- 【转】iOS开发24:使用SQLite3存储和读取数据
转自:http://my.oschina.net/plumsoft/blog/57626 SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效.SQLite3使得不必将每个对象都加 ...