就是GET方式。
数据格式:
服务器文件名后跟着“?”,由于客户端可能向服务器端提交多个键值对,键值对之间用“&”进行分隔
如果URL中有汉字、特殊符号等,则需要对URL进行编码
十三、HttpContext
和本次请求相关对象的一个上下文对象,一般通过它去操作其它对象。
如果在一般处理程序的ProcessRequest方法中,可以通过方法的context参数获得对象。
在其他地方可以通过,HttpContext.Current拿到当前请求堆栈中的HttpContext对象
(不建议,如果涉及到多线程,会无法获得。)
十四、HttpRequest
请求的相关信息
context.Request.Form["username"];获取Post请求中的值
context.Request.QueryString["username"];获取get轻轻中的值
context.Request["username"];
顺序着从QueryString、Form、Cookies、ServerVariable中找,第一个找到的就是
地址栏中的 name=rupeng&age=8 叫做QueryString
注意:
请求参数返回的都是String类型数据,因为Http协议本身就是文本
十五、HttpResponse
响应相关信息
ContentType 设置响应的类型
context.Response.ContentType = "text/html";
OutputStream输出流
context.Response.End(); 停止输出,本质是个异常,只是被freamwork给catch了
Redirect();重定向
向浏览器返回302重定向,是通知浏览器重新访问新网址,所以在地址栏中可以看到变化
十六、context.Server
Server是一个HttpServerUtility类型的对象,不是一个类名
context.server.MapPath("~/a.html"); 将虚拟路径(~代表项目根目录)转换为磁盘上的绝对路径,
(操作项目中的文件使用)
HtmlEncode、HttpDecode
HTML编码与解码
示例代码:
List<T> list = new List<T>(); 想在html中显示就要对“<>”进行转义
< less than
> great than
context.server.htmlencode("List<T> list = new List<T>()");可以直接进行转义
UrlEncode、UrlDecode
url编码与解码
方式同上!!
十七、无状态的HTTP
HTTP协议都是无状态的:
无法保存上次和服务器交互的内容:每次HTTP请求到达aspnet都是创建一个新的HTTPhandler对象,来进行处理
实现“记住上次操作”的方法:
传递给浏览器一个值,让浏览器下次提交时上传这个值,来进行判断;
如果要知道上一次的状态:
一个方法是在对浏览器响应结束之前将状态信息保存到页面表单中,
下次页面再向服务器发出请求的时候带上这些状态信息,
这样服务器就能根据这些状态信息还原上次的状态了,类似于去看病的病历本。
十八、Cookie
Cookie是和站点相关的:
每次想服务器请求的时候,除了发送表单参数之外,还会将和站点相关的所有Cookie都提交给服务器
Cookie保存在浏览器端
如果不设定Expires(Cookie 的声明周期),则关闭浏览器,Cookie就失效
Cookie的缺点:
不能存储太多内容——大小限制
机密信息不能存——保存在浏览器端,容易被作假
不希望丢失的数据不能存——可以被清除
不能跨浏览器使用——每个浏览器的Cookie是独立的
Cookie的Path: 将Cookie设置在哪个路径下
如果没有设置,当前路径和子文件夹都可以读取
如果要整个域名都可以访问,则要设置为“/”(根目录),
如果没有设置,浏览器默认设置,(原理:反编译HttpCookie可以看出)
Cookie无法跨域名读写
子域名之间默认无法操作,需要操作则设置Domain为父域名:
www.rupeng.com 与 bbs.rupeng.com 需要设置Domain为".rupeng.com"
Domain=域名
十九、Session(会话)
保存在服务器端,保存和当前客户端相关的数据
有自动销毁机制,一段时间内浏览器没有和服务器发生交互,就会销毁(为什么一段时间没有操作,账户会推出)
修改Session生命周期的方法:
在web.config的System.web节点下配置sessionState节点的timeout,
单位是分钟,默认是20(只是建议值,在设定范围内有可能会被服务器以“压力”为理由清理掉)
Cookie和Session的区别:
Cookie是保存在浏览器的,Session是保存在服务器的
通过Http报文发现:Cookie中放了一个SessionId,服务器中保存SessionId和数据的对应关系
(键值对的关系,浏览器的Cookie有记录当前的Session的Id,服务器接收到到这个Id的时候会在服务器上查找到对应的Session,并按照Session中的数据进行操作)
两者的作用的是一样的:
都是保存和当前客户端相关的数据,都存在生命周期
Guid算法:
根据网卡mac地址、系统时间、Cpu时钟周期等算出来的值,
这个值在同一台电脑上多次调用都不会重复,不同电脑同一时间也不重复
可以保证“全球唯一”
调用方法:
Guid.NewGuid();
在服务器中生成Guid(SessionId)到Cookie中,
然后在服务器中建立一个以Guid为文件名的文件,文件内容为session的值
二十、进程外Session
因为Session默认是保存在服务器内存中的(InProc),当服务器重启之后,Session就会销毁,就会造成用户反复登录的问题!
解决方法:
将Session保存在数据库中,服务器在重浏览器拿到SessionId后去服务器查找Session的内容
相关要点:
需要进行“序列化”和“反序列化”
好处:
解决服务器重启的问题,有利于“服务器集群”技术的实现
二十一、ASP.NET WEBFORM 最佳模式
最佳模式:
把aspx当成模板引擎,轻量使用WebForm控件
二十二、Aspx(新建-web窗体)
在aspx中可以使用<%=表达式%>的方式在页面的相应位置输出表达式或者局部变量
该表达式至少要用protected级别,表达式也可以是一个方法、属性或者字段
注意:
如果自动提示出不来,重新生成项目即可
不要漏写“=”,通过反编译,“=”相当于Response.Write()
可以直接写成<%Response.Write(表达式)%>
页面中,除了<%%>的内容和runat=server的内容,其它都是原样输出
二十三、aspx和ashx的关系
aspx就是一个特殊的一般处理程序(ashx,IHttpHandler):
aspx对应的类是Page,它实现了IHtt