浅谈ASP.NET的内部机制(一)
前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代码来运行的?.....理解这些问题,使我们可以更加好的开发ASP.NET。
1.当我们在浏览器中请求一个ASP.NET网站的某个页面的时候,如,我们在浏览器中输入"http://localhost/Demo.aspx",这个请求就被发送到了服务器(当然了,这个网站是部署在IIS中的)。当请求到达了服务器之后,那么IIS就开始进行一系列的操作。注意,不是每个请求都一定会由ASP.NET来运行处理的,大家稍后就会明白为什么。
2.在IIS中有一个组件:http.sys,其实这个组件的作用很简单,就是验证请求的url,如之前的"http://localhost/Demo.aspx".如果请求的URL不符合http.sys的要求,那么这个请求就不会被传递给ASP.NET的处理程序,这样就在IIS这道门槛这些阻止了不合法的url请求,这样ASP.NET就不用处理这个不合法的请求,就减轻了服务器的压力。
下面,我们就来看看这个http.sys到底是怎么样处理请求的url的,当大家明白这个问题后,就可以帮助我们解决很多的以前遇到的问题。
首先请大家看看下面的图:
图片看不清楚?请点击这里查看原图(大图)。
当发送一个请求来请求页面的时候,http.sys就会检查这个请求的url和headers的总的大小:包含检查url中有关查询字符串的大小,如demo.aspx?username=demo,也会检查cookie的大小。把这些所有的加起来,看看它们是否超过了16KB,如果超过了,请求就失败了。所以请求根本就没有传递给ASP.NET。
而且在http.sys检查url的时候也有很多的要求的。如我们之前的那个url:
http://localhost/Demo.aspx
这个url是由localhost,Demo.aspx,这些路径的片段组成的,每一个由"/"分割的字符串都是一个路径片段,本例中就有两个路径片段。在默认情况下,http.sys要求一个url的路径片段不超过255个,并且每个路径片段的大小也不要超过260个字母。但是注意,如果在Demo.aspx后面有查询字符串,"Demo.aspx?page=1",那么这个片段就可以超过260个字母的限制,即"Demo.aspx?page=1"可以更大。但是不管怎么样,这些url的大小,如之前所说的,不能超过16KB。如果没有通过http.sys的要求,IIS就发送一个404的错误。
之前也说了的,那是默认的这只,其实这些设置我们是可以在注册表中改的。但是默认设置已经很不错了,所以一般没有必要改。
相关文档:
//private string datapatch = ConfigurationSettings.AppSettings["acessconn"];//数据库地址
private string datapatch = "db/global.asa";//数据库地址
///
/// 取得dataset
//
/// 查询语句
///
public DataSet GetDataSet(string Commandtext)
{&nbs ......
ASP.NET 配置节架构包含控制 ASP.NET Web 应用程序行为的元素。如果为属性指定了默认值,则该默认值是在 Machine.config 文件中设置的,该文件的路径是 systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\Machine.config。
<configuration>
<location>
......
示例一
在Global.asax.cs文件中:
protected void Application_Start(Object sender, EventArgs e)
{
System.Timers.Timer timer1 = new System.Timers.Timer();
&nbs ......
ASP.NET防止SQL注入函数:
using System;
using System.Text.RegularExpressions;
using System.Web;
namespace FSqlKeyWord
......{
/**//**//**//// <summary>
/// SqlKey 的摘要说明。
/// </summary>
public class S ......