核心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部分

 1     public class SampleHandler : IHttpHandler
 2     {
 3
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             context.Response.ContentType = "text/plain";
 7             context.Response.Write("Hello World");
 8         }
 9
10         public bool IsReusable
11         {
12             get
13             {
14                 return false;
15             }
16         }

1 <system.webServer>
2     <handlers>
3       <add name="SampleHandler" verb="*" path="callHandler" type="xxx,SampleHandler"/>
4     </handlers>
5   </system.webServer>

  3.2创建自定义的模块

  要创建自定的模块,类可以实现IHttpModule.

 1   public class Class1 : IHttpModule
 2     {
 3         public void Dispose()
 4         {
 5             throw new NotImplementedException();
 6         }
 7
 8         public void Init(HttpApplication context)
 9         {
10             throw new NotImplementedException();
11         }
12         //可以定义BeginRequest EndRequest,AuthorizeRequest等
13         private void BeginRequest(object sender,EventArgs e)
14         {
15
16         }

1  <system.webServer>
2     <modules>
3       <add name="Class1" type="程序集,Class1"></add>
4     </modules>
5   </system.webServer>
6   <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的存取  

 1   protected void Page_Load(object sender, EventArgs e)
 2         {
 3             HttpCookie cooick = Request.Cookies["cooickstate"];//取
 4
 5             if (cooick != null)
 6                 Label1.Text = cooick.Value;
 7         }
 8
 9         protected void Button1_Click(object sender, EventArgs e)
10         {
11             var cooick = new HttpCookie("cooickstate", TextBox1.Text);
12
13             if (CheckBox1.Checked)
14                 cooick.Expires = DateTime.Now.AddYears(1);//设置永久cookie
15
16             Response.SetCookie(cooick);//存
17         }

  一些限制:用户可以在禁用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缓存

  缓存非常类似应用程序状态。但可以对他的生命周期进行更多的控制

1  Cache.Add("canche", "value", null, System.Web.Caching.Cache.NoAbsoluteExpiration,
2                 TimeSpan.FromMinutes(30), 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;

配置文件管理

  var inactiveProfiles = ProfileManager.GetAllInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddYears(-1));//查找
            ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddYears(-1));//删除活动的配置文件

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", "[email protected]", "[email protected]", "hello", "hello", true, out status);
            if (status == MembershipCreateStatus.Success)
            {
                //create ok
            }

登录页面验证并获取信息

 if (Membership.ValidateUser("123", "[email protected]"))
            {
                FormsAuthentication.SetAuthCookie("123", 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获取一个指定用户是否属于特定角色。

时间: 2024-07-28 19:11:38

核心ASP.NET的相关文章

ASP.NET4 与 VS2010 Web 开发页面服务改进

转:http://blog.163.com/kele_lipeng/blog/static/81345278201132754729336/ 作者:朱先忠 本文将接着上一篇 ASP.NET4与VS2010Web开发核心服务改进 继续讨论核心ASP.NET服务方面的改进. 四.永久重定向页面 一种常见的Web应用程序做法是,随着时间的推移经常移动网页和其他内容,从而导致搜索引擎失效链接的积累.在ASP.NET中,开发商通常采用的处理旧网址请求的方案是,使用 Response.Redirect方法把

[译] ASP.NET 生命周期 – ASP.NET 上下文对象(五)

ASP.NET 上下文对象 ASP.NET 提供了一系列对象用来给当前请求,将要返回到客户端的响应,以及 Web 应用本身提供上下文信息.间接的,这些上下文对象也可以用来回去核心 ASP.NET 框架特性. 上下文对象提供了应用,当前请求,与当前请求相关联的响应的信息.也提供了对多数重要的 ASP.NET 平台服务的访问,比如安全与状态数据.我们可以在 MVC 框架的 controllers 和 views 中使用上下文对象来根据当前的请求或者应用状态数据来调整我们应用的响应.在创建模块或者处理

ASP.NET MVC5 ModelBinder

什么是ModelBinder ASP.NET MVC中,所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应.为了能够正确处理请求,Action的参数(如果有的话),必须在Action执行之前,根据相应的规则,把请求中所包含的数据提取出来并将映射为Action的参数值,这个过程就是ModelBinder.ModelBinder的作用就是为Action提供参数列表. ModelBinder的好处 使代码变得更加简洁 帮助我们获取HTTP请求中的数

ASP.NET 生命周期(原文翻译)

在网上看到这篇文章,老外写的,里面很多图片挺精致,顺带翻译过来给大家分享下,英语太次好多地方都翻不过来 ASP.NET application and page life cycle Download source code - 4.03 KB 目录 简介 两步处理法 创建ASP.NET环境 使用MHPM事件处理请求 在哪些事件里我们哪些事? 一个简单的示范代码 放大ASP.NET页面事件 关于源码 references 简介 在这篇文章,我们将努力弄明白从用户发送请求开始到浏览器渲染完毕过程中

asp.net面试题总结1(未完待续。。。。)

1.MVC中的TempData\ViewBag\ViewData区别? 答:页面对象传值,有这三种对象可以传. (1)  TempData  保存在Session中,Controller每次执行请求的时候,会从Session中先获取 TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删 除.具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTemp

MVC5 ModelBinder

MVC5 ModelBinder 什么是ModelBinding ASP.NET MVC中,所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应.为了能够正确处理请求,Action的参数(如果有的话),必须在Action执行之前,根据相应的规则,把请求中所包含的数据提取出来并将映射为Action的参数值,这个过程就是ModelBinding.ModelBinding的作用就是为Action提供参数列表. ModelBinding的好处 使代码变

HttpModule、HttpHandler和Page的生命周期

1.引言 2.两个处理步骤 2.1.创建ASP.NET环境 2.2.用触发的MHPM事件处理请求 3.什么事件中应该做什么 4.示例代码 5.深入ASP.NET页面事件 1.引言 这篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事件的差异.因此,我们首先将介绍解ASP.NET请求的两个概括的步骤,接下来我们将介绍'HttpHandler','HttpModule'和ASP.NET页面对象发出的事件的差异.随着我们的事件旅程,我们将理解这些事件的逻辑. 2.两个处理步骤 ASP

MVC教程一:MVC简介

一.概述 1.MVC是一种流行的Web应用架构技术,他把Web应用划分成Model(模型).Controller(控制器)和View(视图)三部分. 2.优点:可测试.可维护 3.MVC是ASP.NET技术的子级(ASP.NET MVC),ASP.NET包括:ASP.NET WebForm和ASP.NET MVC. 二.MVC简介 1.MVC是什么 MVC是一种软件架构设计模式,针对具备人机交互功能的软件和程序. 2.执行顺序 控制器接收网页发送的请求,如果需要请求数据,先从Model里面取出数

IIS 7.0的集成模式和经典模式

IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式.经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库, 原先运行于IIS6.0下的Web应用程序迁移到IIS7.0中只要将应用程序配置成经典模式,代码基本不用修改就可以正常运行.集成模式是一种统 一的请求处理管道,它将ASP.NET请求管道与IIS核心管道组合在一起,这种模式能够提供更好的性能,能够实现配置和管理的模块化,而且 增加了使用托管代码模块扩展IIS时的灵活性.如果老的Web应用程序运行于IIS7