Asp.net知识点总结(五)
ASP.NET高级配置
Cache缓存机制
缓存的参数:第一个为缓存的主键;第二个人为缓存的值;第三个为缓存的依赖项;第四个为缓存移除的时间;第五个为缓存时间的间隔
设置一般缓存
1
//this.Cache.Insert(“w”, DateTime.Now.ToLongTimeString(), null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
设置滑动缓存
1
//this.Cache.Insert(“w”,DateTime.Now.ToLocalTime(),null,DateTime.MaxValue,new TimeSpan(0,0,5));
缓存依赖为文件
1
//this.Cache.Insert(“w”, DateTime.Now.ToLocalTime(), new CacheDependency(Server.MapPath(“a.html”)));
缓存数据库
1
// this.Cache.Insert(“w”,DateTime.Now.ToLocalTime(),new SqlCacheDependency(“web.config文件中的配置数据库连接名”,”数据库缓存表名的名字”));
配置缓存数据库
数据库缓存依赖
S服务器名称 -E集成身份验证 -ed启动 -d数据库名称 -et指定缓冲依赖的表名 -t表名**
在vs2010的命令提示符中运行(切换到aspnet_regsql.exe所在的目录)
1
aspnet_regsql -S . -E -ed -d HKCorpData -et -t HKSJ_USERS
缓存依赖禁用该数据库
1
aspnet_regsql -S . -E -dd -d HKCorpData
web.config配置文件如下:
connectionString为连接字符串的名称
1234567
/* <caching><sqlCacheDependency enabled=”true”><databases><add name=”数据库名” connectionStringName=”connectionString” pollTime=”500”/></databases></sqlCacheDependency></caching>*/
session使用
1
/*stateServer数据必须是能可序列化的数据*/
1.进程内使用
123
session[”key”]=”value”;object obj=session[”key”];
2.进程外使用
配置web.config文件:
1
<sessionState mode=”StateServer” stateConnectionString=”tcpip=localhost:42424”></sessionState>
如果是远程的stateserver配置注册表
命令:cmd → regedit.exe
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection
3.数据库服务器上使用
1
aspnet_regsql.exe -S 127.0.0.1 -U sa -P 123 -ssadd -sstype c -d SessionTest
1
<sessionState mode=”SQLServer” allowCustomSqlDatabase=”true” sqlConnectionString=”Data Source=.;Initial Catalog=SessionTest;uid=sa;pwd=123”></sessionState>
全局文件的使用
全局文件介绍:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
//网站在iis上开启使用运行的方法,并对变量进行初始化protected void Application_Start(object sender, EventArgs e){//这里的变量为全局变量,也就是静态变量,可以被整个网站共用例:Application[”isbackground”] = “bluk”;//需要使用的这个颜色的时候可以直接调用Application[”isbackground”]//或者网站访问量Application[”number”] = 0;}//当用户访问网站的时候执行此方法protected void Session_Start(object sender, EventArgs e){//在这里可以验证用户是否登入或者在线统计lock (Session[”Id”]) {//在线人数统计Session[”Id”] = (int)Session[”Id”] + 1;//访问次数统计Application[”number”] = (int)Application[”number”] + 1; }}//浏览器请求iis服务器到达管道中的第一个事件,在管道中触发protected void Application_BeginRequest(object sender, EventArgs e){//在这里可以对用户请求过滤例如:防盗链设置if (Request.RawUrl.Contains(“images/”)){if (Request.UrlReferrer == null || !IsSameDomain(Request.UrlReferrer, Request.Url)) {Response.ContentType = “image/jpeg”;string path = Request.MapPath(“~/daolian.jpg”);Response.WriteFile(path);//结束请求Response.End(); }}}//判断两个域名是否相等public bool IsSameDomain(Uri u1, Uri u2){return Uri.Compare(u1, u2, UriComponents.HostAndPort, UriFormat.SafeUnescaped, StringComparison.CurrentCultureIgnoreCase) == 0 ? true : false;}//管道中的第二个事件,验证请求,开始检查用户的身份protected void Application_AuthenticateRequest(object sender, EventArgs e){//一般用来获取用户信息//获取用户的访问证书HttpClientCertificate hr = new HttpClientCertificate();hr= Context.Request.ClientCertificate;//获取用户的访问地址string str= Request.UserHostAddress;}//网站出错时运行此方法protected void Application_Error(object sender, EventArgs e){//可以将访问的地址更改为其他不出错的地址页面上去Response.Redirect(Server.MapPath(“a.html”));}//当用户下线或者不在访问该网站时执行此方法protected void Session_End(object sender, EventArgs e){lock (Session[”Id”]) {if ((int)Session[”Id”] > 0) {Session[”Id”] = (int)Session[”Id”] - 1; } }}//网站停止或者重启时运行此方法protected void Application_End(object sender, EventArgs e){//可以保存当前网站的一些信息到文件中//将网站的访问量包存到文件中File.WriteAllText(“log.txt”, Application[”number”].ToString());}
同时管道中的事件也可以在这里注册,下面是请求管道中的已经公开的19个事件:
(1)BeginRequest: 开始处理请求
(2)AuthenticateRequest授权验证请求,获取用户授权信息
(3):PostAuthenticateRequest获取成功
(4): AunthorizeRequest授权,一般来检查用户是否获得权限
(5):PostAuthorizeRequest:获得授权
(6):ResolveRequestCache:获取页面缓存结果
(7):PostResolveRequestCache已获取缓存 当前请求映射到MvcHandler(pr): 创建控制器工厂 ,创建控制器,调用action执行,view→responseaction Handler : PR()
(8):PostMapRequestHandler创建页面对象:创建 最终处理当前http请求的Handler 实例: 第一从HttpContext中获取当前的PR Handler ,Create
(9):PostAcquireRequestState获取Session
(10)PostAcquireRequestState获得Session
(11)PreRequestHandlerExecute:准备执行页面对象
执行页面对象的ProcessRequest方法
(12)PostRequestHandlerExecute执行完页面对象了
(13)ReleaseRequestState释放请求状态
(14)PostReleaseRequestState已释放请求状态
(15)UpdateRequestCache更新缓存
(16)PostUpdateRequestCache已更新缓存
(17)LogRequest日志记录
(18)PostLogRequest已完成日志
(19)EndRequest完成、
IHttpModule接口的使用:
此接口中有两个方法Dispose和Init,在Init中也可以注册管道中的19事件
配置web.config文件:
在system.web节点下配置
12345678910111213141516171819202122232425262728
<httpModules><add name=”文件名称” type=”类的全名称”/><!--<add name=”MyHttpModuleDemo” type=”CZBK.WebSite.Web.HttpModule.MyHttpModuleDemo”/>--></httpModules>//对象释放式执行public void Dispose(){}/// <summary>/// 初始化时执行,可以对管道中的公开的事件进行注册/// </summary>/// <param name=”context”>上下文对像</param>public void Init(HttpApplication context){//例:注册管道中的第一事件//注册开始处理请求事件context.BeginRequest += new EventHandler(context_BeginRequest);}/// <summary>///注册管道中的第一个事件的方法/// </summary>/// <param name=”sender”>请求信息</param>/// <param name=”e”>与事件有关的基类对象</param>private void context_BeginRequest(object sender, EventArgs e){//将sender中的信息转化为应用程序的基类对像HttpApplication application = sender as HttpApplication;application.Context.Response.Write(“我是在继承了IHttpModle的类中注册的管道中的事件”);}
错误页配置:
在web.config文件中的system.web配置:
123
<customErrors mode=”错误页配置模式:On开启, Off关闭,RemoteOnly远程开启 “ defaultRedirect=”默认错误发生时跳转的页面”><error statusCode=”http状态错误代码” redirect=”指定跳转的页面”/></customErrors>
例:
1234
<customErrors mode=”RemoteOnly” defaultRedirect=”myErrorpage.aspx”><error statusCode=”404” redirect=”error.html”/><error statusCode=”403” redirect=”error.html”/></customErrors>
url重写原理
123456789101112131415
void Application_BeginRequest(object sender, EventArgs e) {//url重写HttpApplication app = sender as HttpApplication;string url = app.Request.RawUrl;/根据请求的地址解析出实际地址来Regex r = new Regex(“/(\\d+)/details\\.htm",RegexOptions.IgnoreCase);Match m = r.Match(url);if (m.Success) {string id = m.Groups[1].Value;app.Context.RewritePath(“~/PhotoDetails.aspx?id=” + id); } }
urlRewriter
1、在节点加入
12
<section name=”RewriterConfig”type=”URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter” />
2、在之后加入
123456789
<RewriterConfig><Rules><RewriterRule><LookFor>~/(\d{4})/(\d{2})/Default\.aspx</LookFor><SendTo>~/Default.aspx?ID=$1</SendTo></RewriterRule></Rules></RewriterConfig>
3、中加入
12
<add verb=”*” path=”*.aspx” type=”URLRewriter.RewriterFactoryHandler, URLRewriter” />
数据绑定:
1.<%#Eval()%>Eval单向绑定,只是计算表达式的值输出
2.<%: %>将绑定的数据进行格式化后再显示在页面上
3.<%= %>将绑定的数据直接输出来不做什么处理
4.<%#Bind()%>双向绑定,不仅可以计算表达式的值输出,还可以将用户填入的值更新到数据中
5.第二种方法的方法重载:
12
<a href=’<%# Eval(“userId”,”Default.aspx?id={0}”)%>’><%# Eval(“userName”) %></a>
6.eval同时绑定两个值
12
<a href=’<%# string.Format(“Default.aspx?id={0}&role={1}”, Eval(“userId”),Eval(“userRole”))%>’><%# Eval(“userName”) %></a>
注意%和后面的#不能有空格或其他发符号
WebRequest类使用:
12345678910
PageUrl = “http://xj8c.cc “; //需要获取源代码的网页WebRequest request = WebRequest.Create(PageUrl); //WebRequest.Create方法,返回WebRequest的子类HttpWebRequestWebResponse response = request.GetResponse(); //WebRequest.GetResponse方法,返回对Internet请求的响应Stream resStream = response.GetResponseStream(); //WebResponse.GetResponseStream方法,从Internet资源返回数据流。Encoding enc = Encoding.GetEncoding(“GB2312”); // 如果是乱码就改成utf-8 / GB2312StreamReader sr = new StreamReader(resStream, enc); //命名空间:System.IO。 StreamReader类实现一个TextReader (TextReader类,表示可读取连续字符系列的读取器),使其以一种特定的编码从字节流中读取字符。ContentHtml.Text = sr.ReadToEnd(); //输出(HTML代码),ContentHtml为Multiline模式的TextBox控件resStream.Close();sr.Close();
文章来源:
Author:阿星Plus
link:http://xj8c.cc/2015/07/16/asp.net-knowledge-point-summary-5/
上一篇:你必须知道的十个编程语言