搭建IIS本地服务器
打开服务
新建网站
浏览新建立的网站
问题:
数据库访问用户权限问题:更改网站用户为netservice
目录浏览权限问题
dotnet版本问题
IIS处理用户请求与响应过程
- URL封装报文
- http.sys内核模块监听对某个端口的请求
- 读取注册表获取哪个进程可以处理该请求
- inetinfo.exe处理请求启动w3wp.exe,分动态资源与静态资源
- 对于静态资源直接找到磁盘上的文件返回
- 对于动态资源,找到处理该动态页面的
dll
,对于aspx
找到aspnet.isapi.dll(C++)寄宿在w3wp.exe运行 - aspnet.isapi.dll开启dotnet运行时
- 获取一个实现了
IISAPIRuntime
接口的对象ISAPIRuntime
,调用ProcessRequest
方法(参数之一ecb是传入的数据句柄) ProcessRequest
对请求报文进行简单的封装成ISAPIWorkerRequest
(wk)对象- 调用
HttpRuntime.ProcessRequest(wk)
对wk进行详细封装成HttpContext
对象包含HttpRequest
,HttpResponse
- 通过工厂模式【1】创建一个
HttpApplication
对象后调用ProcessRequest
方法 - 。。。
【1】
为什么使用工厂模式:
初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有悖于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间耦合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情
如何使用工厂模式:
使用接口派生实体类,通过工厂模式创建不同的对象
简单工厂:
1 | public class Factory{ |
那么在你的程序中,如果要创建ISample
的实列时候可以使用
ISample sampleA=Factory.creator(1);
抽象工厂:
工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).
这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Sample,如果我们还有新的产品接口Sample2.
这里假设:Sample有两个实体类SampleA和SampleB,而Sample2也有两个实体类Sample2A和Sample2B
那么,我们就将上例中Factory变成抽象类,将共同部分封装在抽象类中,不同部分使用子类实现,下面就是将上例中的Factory拓展成抽象工厂:
1 | public abstract class Factory{ |
https://baike.baidu.com/item/%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/9852061?fr=aladdin
创建一个简单的ASP.NET
新建html登录界面
1 | <form method="post" action="LoginHandler.ashx"> |
编写LoginHandler.ashx
从页面获取值的方式:
get:context.Request.QueryString["id"]
post:context.Request.Form["id"]
通用:context.Request["id"]
|| context.Request.Params["id"]
这里我简单的连接数据库进行判断
1 | string id = context.Request["id"]; |
登录错误应该重定向,此时response返回的是302,浏览器重新get
1 | context.Response.Redirect("login.html"); |
有时一般处理程序会进行读取返回
获取页面绝对路径使用context.Server.MapPath("login.html");
1 | var html = File.ReadAllText("path"); |