核心ASP.NET
1.用于Web应用程序的.NET Framework
ASP.NET是.NET Framework的一部分,它可以在通过HTTP请求文档是在WEB服务器上动态创建它们,在.Net Framework中创建Web应用程序有不同的架构,ASP.NET Web From是这些技术的旧版本,ASP.NET MVC是新版本。
ASP.NET MVC基于MVC模式:Model-View-Controller(模型-试图-控制器),其中模型实现了数据实体和数据访问,试图表示显示给用户的信息,控制器使用模型把数据发给试图,控制器接收来自浏览器的请求,返回一个响应。
2.托管和配置
Web应用程序需要宿主才能运行。通常IIS是用于生产站点的宿主。
要配置Web应用程序,应使用应用程序配置文件,所有的.Net程序(不仅仅是web)使用的第一个配置文件是machine.config,对于Web应用程序,需要配置成员和角色提供程序,对于这些提供程序也可以用于其他.NET应用程序,所以可以将这个配置放在machine.config中.
与machine.config位于同一目录下的web.config文件用于ASP.NET特定的配置,这里的配置专用于Web应用程序,其中包括如下默认设置:信任等级和完全信任的程序集,用于在第一次在使用网站时编译C#代码的编译配置,引用的程序集,健康监测,事件日志和配置文件提供程序,Http处理程序和模块,WCF的配置协议,站点地图和Web部件的配置。
3.处理程序和模块
在客户端向Web服务器发出请求时,Web服务器会尝试查找合适的请求类型的处理程序,IIS包含了大量的处理程序,如.aspx会处理通过PageHandleFactory实例化的页面,.svc文件的处理程序有WCF使用。调用每个处理程序,应使用几个模块,他们分别处理安全性,验证用户的身份,处理授权,创建会话状态等。
3.1 创建自定义的处理程序
要创建自定义的处理程序,可以创建一个实现了IHttpHandler接口的类,如果处理程序实例可以处理多个页面中重用,IsReusable就返回true,ProcessRequest方法接收带参数的HttpContext.在Web应用程序中添加引用,并把处理程序添加到Web.config文件的handlers部分
public class SampleHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } }
<system.webServer> <handlers> <add name="SampleHandler" verb="*" path="callHandler" type="xxx,SampleHandler"/> </handlers> </system.webServer>
3.2创建自定义的模块
要创建自定的模块,类可以实现IHttpModule.
public class Class1 : IHttpModule { public void Dispose() { throw new NotImplementedException(); } public void Init(HttpApplication context) { throw new NotImplementedException(); } //可以定义BeginRequest EndRequest,AuthorizeRequest等 private void BeginRequest(object sender,EventArgs e) { }
<system.webServer> <modules> <add name="Class1" type="程序集,Class1"></add> </modules> </system.webServer> <system.codedom>
除了使用处理程序和模块全局的处理通用的功能之外,另一种方式是使用全局的应用程序类。
4.全局的应用程序类
全局应用程序类可以在Web应用程序中全局使用,以独立于页面处理事件,在程序第一次接收到请求时,会创建Application对象,此时,也会触发Application_Start事件,并创建一个HttpApplication实例池。每个入站的请求都会接受这些实例中的一个来处理请求。这意味着HttpApplication对象不需要处理并发访问,在完成工作后,就会触发Application_End事件,释放Application对象。
单个用户访问Web程序时,会创建一个用户专用的Session对象,并触发Session_Strat事件。在会话中,单个请求会触发 Application_BeginRequest和Application_End事件,会话的终止会触发Session_End事件,并释放Session对象。
5.状态管理
5.1视图状态
视图状态仅在页面内部使用。只要用户位于同一页面中,就可以使用视图,试图状态在页面中创建隐藏的Html字段,该字段会发送给服务器。视图状态可以通过ViewState属性来访问。可以通过EnableViewState=false来禁用。
优点:没有超时。
缺点:必须在字符串中表示,所有的试图状态数据总是通过网络发送。
5.2Cookie
cookie存储在客户端的浏览器内存(会话cookie)或磁盘上(永久的cookie),他们是HTTP协议的一部分,在HTTP头发送,每次用户访问Web站点时,这个站点的cookie就发送到服务器。
cookie的存取
protected void Page_Load(object sender, EventArgs e) { HttpCookie cooick = Request.Cookies["cooickstate"];//取 if (cooick != null) Label1.Text = cooick.Value; } protected void Button1_Click(object sender, EventArgs e) { var cooick = new HttpCookie("cooickstate", TextBox1.Text); if (CheckBox1.Checked) cooick.Expires = DateTime.Now.AddYears();//设置永久cookie Response.SetCookie(cooick);//存 }
一些限制:用户可以在禁用cookie, 大小不能超过4096字节,浏览器在每个域中存储的cookie数不能超过50,浏览器存储的总cookie数不能超过3000
由于这些限制,cookie通常用于在客户端发送一些标识符,用于把他映射到服务器上真是的用户数据上。
5.3会话
使用从page的Session属性返回HttpSessionState对象,可以存储用户会话状态。
5.3.1 会话标识符
服务器上有了会话状态,客户端就需要用某种方式来标识,以便把会话映射到客户端。默认使用名为ASP.NET_SessionId的临时cookie来实现。
会话状态可以用各种方式配置,如果不使用cookie,也可以使用URL标识会话, 可以在system.web配置中定义sessionState,并把cookieless特性设置为UseUri
<sessionState cookieless="UseUri">,其中cookieless特性允许启用UseCookies(这是默认的),UseUri,UseDeviceProfile和AutoDetect的设置,UseDeviceProfile可以从配置文件中提取浏览器的信息,如果浏览器支持cookie,就使用cookie,这个设置不会检测用户是否用浏览器关闭了cookie。设置AutoDetect会启动自动检测功能,自动检测功能会把检测cookie发送到客户端,客户端会给会话使用返回的任何检测过的cookie,否则就使用URI.
5.3.2 会话的储存
默认情况下,会话信息仅存储在ASP.NET进程内部的内存中,在不同的地方存储会话状态,而不只在进程中存储,只是配置问题。使用StateServer模式,会话就可以存储在单独的进程中。
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"
cookieless="UseCookies" timeout="20">
5.4应用程序状态
会话状态是每个用户在服务器端状态,应用程序状态是全局的服务器状态,在所有用户间共享。注意在使用之前需要锁定。
5.5缓存
缓存非常类似应用程序状态。但可以对他的生命周期进行更多的控制
Cache.Add("canche", "value", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(), System.Web.Caching.CacheItemPriority.Normal,null);
第3个参数是类型CacheDependency,依赖可以定义缓存对象何时失效,除了传递Cache Dependency之外,还可以添加派生自CacheDependency类的任何类型,如SqlDependency和AggregateCacheDependency.第4个和第5个参数定义了缓存何时失效。第6个参数为对象的优先级,其值是Low,BelowNomal, Normal,AboveNomal,High和NotRemovable.最后一个参数为CacheItemRemovedCallback类型的回调函数,在缓存删除是执行。
5.6配置文件
Profile API基于一个提供程序的模型,提供程序用于ASP.NET的许多功能。默认提供程序使用machine.config配置,使用通过连接字符串LocalSqlServer定义的SQL server数据库。
使用Asp.net_regsql.exe工具(位于.net runtime目录下)创建数据库,其中包括用于配置文件,成员,角色,个性化等的所有表。添加配置引用
<connectionStrings> <clear/> <add name="LocalSql" connectionString="data source=(local);Database=aspnetdb;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/> </connectionStrings>
在system.web中添加设置
<profile> <properties> <add allowAnonymous="true" name="Color" type="System.String" serializeAs="Xml"/> <add allowAnonymous="true" name="ShoppingCart" serializeAs="Binary" type="WebApplication6.ShoppingCart"/> <group name="UserInfo"> <add name="Name" type="String" serializeAs="Binary"/> </group> </properties>
添加自定义类型
[Serializable] public class ShoppingCart { private List<Item> items = new List<Item>(); public IList<Item> Items { get { return items; } } } [Serializable] public class Item { public string Description { get; set; } public decimal Cost { get; set; } }
写入配置文件
this.Context.Profile["Color"] = "blue"; this.Context.Profile.Save(); //dynamic p = this.Context.Profile; //p.Color = "red"; //p.UserInfo.Name = "Chirstian"; //var cart = new ShoppingCart(); //cart.Items.Add(new Item { Description = "simple", Cost = 20.30M }); //cart.Items.Add(new Item { Description = "simple", Cost = 20.30M }); //p.ShoppingCart = cart; //p.Save();
读取配置文件
dynamic pro = Context.Profile; string s = pro.Color;
配置文件管理
));//查找 ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddYears(-));//删除活动的配置文件
6.成员和角色
6.1 配置成员
为了给用户的身份验证配置成员,需要把System.web中的authentication元素设置为form,默认为window身份验证
<authentication mode="Forms"> <forms defaultUrl="login.aspx" ></forms> </authentication>
配置身份验证模式并不自动表示,匿名用户不能访问
<authorization> <deny users="?"/><!--匿名用户不能访问--> </authorization>
6.2使用成员API
成员API允许创建,查找和删除用户,验证用户密码。
MembershipCreateStatus status; MembershipUser user = Membership.CreateUser("ztb", "123@123.com", "123@qq.com", "hello", "hello", true, out status); if (status == MembershipCreateStatus.Success) { //create ok }
登录页面验证并获取信息
", "123@123.com")) { FormsAuthentication.SetAuthCookie(", false); }; string name = User.Identity.Name;
6.3 启用角色API
<roleManager enabled="true"/> <authorization> <allow roles="Developers"/> <deny users="*"/> </authorization>
Roles类可以使用AddUsersToRole,RemoveUserFromRole,CreateRole,DeleteRole方法管理角色,GetRolesForUser获取一个用户所属角色的列表,IsUserInRole获取一个指定用户是否属于特定角色。
核心ASP.NET的更多相关文章
- ASP.NET MVC5 ModelBinder
什么是ModelBinding ASP.NET MVC中,所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应.为了能够正确处理请求,Action的 ...
- 【ASP.NET MVC 5】第27章 Web API与单页应用程序
注:<精通ASP.NET MVC 3框架>受到了出版社和广大读者的充分肯定,这让本人深感欣慰.目前该书的第4版不日即将出版,现在又已开始第5版的翻译,这里先贴出该书的最后一章译稿,仅供大家 ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
书Adam The Definitive Guide to HTML5 Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4 到此为止,我们已经学了为 ...
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(五)
ASP.NET 上下文对象 ASP.NET 提供了一系列对象用来给当前请求,将要返回到客户端的响应,以及 Web 应用本身提供上下文信息.间接的,这些上下文对象也可以用来回去核心 ASP.NET 框架 ...
- ASP.NET MVC总结
一.概述 1.单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架 2.ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers.Models.V ...
- ASP.NET 生命周期(原文翻译)
在网上看到这篇文章,老外写的,里面很多图片挺精致,顺带翻译过来给大家分享下,英语太次好多地方都翻不过来 ASP.NET application and page life cycle Download ...
- ASP.MVC学习资源总结
自己动手写一个简单的MVC框架(第一版) 自己动手写一个简单的MVC框架(第二版) ASP.Net请求处理机制初步探索之旅 - Part 1 前奏 ASP.Net请求处理机制初步探索之旅 - Part ...
- ASP.NET Core 的Windows和IIS宿主(自动翻译记录)
https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x 支持的操作系统 以下操作系统的支持: Win ...
- [Asp.net]IIS经典和继承模式
引言 由于要在客户那里部署项目,就研究了一下IIS中的集成和经典模式,这里做一些笔记.希望对您有所帮助. IIS7.0和IIS6.0 IIS7.0的web应用程序有两种配置模式:经典模式和集成模式.经 ...
随机推荐
- poj 2126 Factoring a Polynomial 数学多项式分解
题意: 给一个多项式,求它在实数域内的可分解性. 分析: 代数基本定理. 代码: //poj 2126 //sep9 #include <iostream> using namespace ...
- Servlet的学习之Session(1)
在学习完了Servlet中的Cookie技术后,我们再来学习另一个能保存会话数据的技术——Session. Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其 ...
- Selenium HtmlUnitDriver 多浏览器的支持
1.HtmlUnitDriver WebDriver包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver,即使用HtmlUnit时并不会打开真实的浏览器,而是在内存中执行代码,因 ...
- 阻塞队列BlockingQueue用法(转)
多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享. 假设我们有若干生产者线程,另外又有若干个消费者线程.如果生产者线程需 ...
- 高斯消元法~get√
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...
- Android 通过wifi调试程序【转】
1.首先让android手机监听指定的端口: 这一步需要使用shell,因此手机上要有终端模拟器,不过网上很多,随便找个就行了,依次敲入下列几行: ? su//获取root权限 setprop ser ...
- zabbix 获取jvm session信息
zabbix:/root# java -jar /root/cmdline-jmxclient-0.10.3.jar - 121x:5566 "Catalina:type=Manager,c ...
- c语言指针具体解释
指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最基本的风格之中的一个.利用指针变量能够表示各种数据结构: 能非常方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练而高 ...
- VC/MFC 在ListCtl 控件中随鼠标移动提示单元格信息
BEGIN_MESSAGE_MAP(CTipListCtrl, CListCtrl) //{{AFX_MSG_MAP(CTipListCtrl) ON_WM_MOUSEMOVE() ON_WM_DES ...
- Lucene.Net 2.3.1开发介绍 —— 简介
原文:Lucene.Net 2.3.1开发介绍 -- 简介 Lucene.Net是Lucene在dot net平台上的移植版本.它的功能与Lucene一样,都是用来提供一组API,让我们能快速开发自己 ...