标签:
连接:浏览器和服务器之间的连接,当请求完毕后,会关闭连接。
请求(Request):浏览器向服务器发出请求,我需要什么。
响应(Response):服务器响应浏览器,返回浏览器请求的数据。
通过Form获取POST报文体:
1 //context.Request.Form["name"]获得通过报文体传输的参数 2 string name = context.Request.Form["name"]; 3 string age = context.Request.Form["age"];
通过QueryString获取Get方式中的值:
1 //context.Request.QueryString获得GET方式中“GET /Test.ashx?id=5 HTTP/1.1”中的 2 //"id=5"值 3 string name = context.Request.QueryString["name"]; 4 string age = context.Request.QueryString["age"];
同时获取POST和Get中的值:(同时对Form和QueryString进行查询)
1 //context.Request["name"]无论是Get还是Post都能获得 2 string name = context.Request["name"];//[""]索引器 3 string age = context.Request["age"];
服务器获取客户端信息:
1 //服务器想获得浏览器的某些信息:只要浏览器没提交,那么你就获得不了这些信息。服务器无法得知用户是否装了PS,服务器无法得知用户什么时候开机。 2 context.Response.Write("------------------------\n"); 3 for (int i = 0; i < context.Request.Headers.AllKeys.Length; i++)//Request.Headers请求报文头 4 { 5 string key = context.Request.Headers.AllKeys[i]; 6 string value = context.Request.Headers[key]; 7 context.Response.Write(key+"="+value+"\n"); 8 } 9 context.Response.Write("------------------------\n"); 10 11 context.Response.Write(context.Request.HttpMethod + "\n"); 12 //context.Response.Write(context.Request.InputStream);//请求报文体的流 13 context.Response.Write(context.Request.Path + "\n"); 14 context.Response.Write(context.Request.QueryString + "\n"); 15 context.Response.Write(context.Request.PhysicalPath + "\n");//被请求的文件的服务器上的物理路径 16 context.Response.Write(context.Request.UserAgent + "\n"); 17 context.Response.Write(context.Request.UserHostAddress + "\n");//客户端的IP地址 18 context.Response.Write(context.Request.UrlReferrer + "\n"); 19 context.Response.Write(String.Join(",",context.Request.UserLanguages) + "\n");//浏览器支持什么语言
HttpContext:和本次请求相关对象的一个上下文对象,一般通过它过去其他对象。在HttpHandler的ProcessRequest方法中可以通过方法的context参数获得对象。在其他地方可以通过HttpContext.Current拿到当前请求堆栈中的HttpContext对象。
public void ProcessRequest(HttpContext context)
1 context.Response.End(); 2 //因为End()抛出了一个ThreadAbortException,所以不会继续向下执行了 3 //因为异常处理效率低,所以尽可能的不用Response.End(); 4 try 5 { 6 context.Response.End();//终止HttpHandler的执行,不再向下执行了 7 } 8 catch (Exception ex) 9 { 10 11 }
1 FileInfo fi = new FileInfo(@"E:\asp.netcorecode\ASPNETCore\Web1\*.jpg"); 2 FileInfo fi = new FileInfo(@"*.jpg");//永远不要用相对路径,容易进坑 3 string filepath = context.Server.MapPath("~/*.jpg"); 4 //得到文件在服务器磁盘上的绝对路径。~表示网站根目录 5 FileInfo fi = new FileInfo(filepath); 6 context.Response.Write(fi.Length);
HtmlEncode、 HtmlDecode:HTML编码解码。Encode为的是把特殊字符转义显示。
1 string cscode = "hello List<T> list = new List<T>();"; 2 //HtmlEncode:把<>等特殊字符转换为html中的转义字符 3 string enCodeCSCode = context.Server.HtmlEncode(cscode); 4 //context.Response.Write(cscode); 5 context.Response.Write(enCodeCSCode); 6 context.Response.Write("</body></html>"); 7 string s = "hello List<T> list = new List<T>();"; 8 string s1 = context.Server.HtmlDecode(s);//HtmlEncode的反过程 9 context.Response.Write(s1);
UrlEncode、 UrlDecode:url编码解码。汉字、特殊字符(空格、尖括号)等通过Url传递的时候要编码。
1 //数据传输前最好采用UrlEncode编码 2 string s = "hello 世界<>"; 3 string s1 = context.Server.UrlEncode(s); 4 context.Response.Write(s1);
1 context.Response.ContentType = "image/jpeg"; 2 using (Bitmap bmp = new Bitmap(500, 200))//创建一个尺寸为500*500的内存图片 3 using (Graphics g = Graphics.FromImage(bmp))//得到图片的画布 4 using (Font font = new Font(FontFamily.GenericSerif, 30)) 5 { 6 HttpRequest request = context.Request; 7 g.DrawString("IP:" + request.UserHostAddress, font, Brushes.Red, 0, 0); 8 g.DrawString("浏览器:" + request.Browser.Browser + request.Browser.Version, font, Brushes.Red, 0, 50); 9 g.DrawString("操作系统:" + request.Browser.Platform, font, Brushes.Red, 0, 100); 10 bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);//图片保存到输出流 11 } 12 //增加Content-Disposition是告诉浏览器,这个返回的内容是“附件形式”要给用户保存 13 //filename是建议的文件名 14 context.Response.AddHeader("Content-Disposition", "attachment;filename=" + 15 context.Server.UrlEncode("动态文件.txt"));
如果要进行文件上传,则需要采用method="post",并且要设定enctype="multipart/form-data"。提交报文格式会发生变化。用户上传的文件尽量“不落地”,也就是不保存到本地,可以避免:上传文件把服务器撑爆。
1 context.Response.ContentType = "text/html"; 2 HttpPostedFile file1 = context.Request.Files["file1"];//上传的文件,可以是多个 3 HttpPostedFile filehaha = context.Request.Files["filehaha"]; 4 string name = context.Request["name"]; 5 //HttpPostedFile.FileName是文件名,通过查看报文发现,FileName是浏览器提交过去的 6 if (file1.ContentLength > 1024 * 1024) 7 { 8 context.Response.Write("文件不能超过1MB"); 9 return; 10 } 11 12 //为什么根据ContentType判断文件类型不安全。 13 //因为ContentType是浏览器提交的,是可以造假的,文件内容是病毒,filename是1.exe 14 //ContentType伪造成了"image/jpeg"。 15 /* 16 if(file1.ContentType!="image/jpeg"&&file1.ContentType!="image/gif" 17 &&file1.ContentType!="image/png") 18 { 19 context.Response.Write("文件类型不允许"); 20 return; 21 }*/ 22 string fileExt = Path.GetExtension(file1.FileName); 23 if(fileExt!=".jpg"&&fileExt!=".gif"&&fileExt!=".png") 24 { 25 context.Response.Write("文件类型不允许"); 26 return; 27 } 28 29 30 string localFileName = context.Server.MapPath("~/upload") + "/" + file1.FileName; 31 file1.SaveAs(localFileName);//把文件保存到服务器上 32 context.Response.Write(localFileName+"<br/>"); 33 context.Response.Write(name);
标签:
原文地址:http://www.cnblogs.com/Tan-sir/p/4687477.html