您的位置:首页 > 编程语言 > ASP

ASP.NET基础知识

2013-01-25 10:42 381 查看
三层(虚数)架构的命名:

ProjectName+Models:实体模型层

ObjectName:TableName去复数的形式

ProjectName+DAL:Data Access Layer数据访问层

ObjectName+Service:

ProjectName+BLL:Business Logic Layer业务逻辑层

ObjectName+Manager:

ProjectName[+UI]:User Interface用户界面、表示层

ObjectName+ManagePage:没有一定的规范,只要不和以上类名重复即可

作业中出现的问题:

命名规范:

需要把每次作业都当成项目来做,达到最大的锻炼价值:DBHelper Models

方法:有进有出 不大不小

业务逻辑层返回的值未操作、判断是否为空导致该方法行数已经远远超过30行

表示层或者业务逻辑层是否会引用到System.Data.SqlClient的命名空间?不可能。

三层之间的传递数据是否一定需要利用实体模型层的对象来传递?不一定,尽量用。

传递的数据实在少,1个到2个:比如通过名字查询用户,就只传递名字,很简单,无需封装;

实体模型层来封装非常的麻烦,比如要传递五个参数,却分别属于5个对象:

复杂的对象查询,有可能涉及到很多张表,而查询条件分别属于各自的表,就导致每个参数的传递都需要对象来封装,显得非常麻烦;

实体模型层放不下的数据,也可以利用对象和基本数据类型结合传递的方式来传递数据:如果查询数据,查询20岁到30岁之间的用户信息,此时一个User对象是无法包含两个年纪的数据的,只能采用一个User对象+一个int型参数来传递

检测代码究竟应该放在表示层还是业务逻辑层还是数据访问层?简单的判断都直接放在表示层,将来前移到客户端JS代码中去,需要访问数据库、需要安全性更高同时涉及到业务就放在业务逻辑层

ASP.NET简介

一、
学习层次:

1.
拖拉控件:初级层次,熟练度积累

2.
内部原理机制:中级层次,了解控件内部原理,方便快速学习控件

3.
和其他技术综合性高级应用:AJAX

面试:谈心得体会>谈原理机制>谈功能

二、
根本性原理,ASP.NET动态服务器语言:

表面上操作的是控件,但是对于浏览器端没有控件这一说,只有HTML+CSS+JS。将控件根据适当的情况通过.NETFramework转换为合适的HTML+CSS+JS

三、
ASP.NET作用

1.
增删改查数据库

2.
复杂的业务逻辑计算

3.
安全性更高的业务逻辑功能

四、
相关名词比较和解释

.NETFramework:.NET整个类库,按照功能分,

ADO.NET类库:访问数据库

ASP.NET类库:B/S表示层

.NET平台:包含所有,是一切.Net的基础

C#语言:按照语言分类

VS编译工具:IDE,编译调试运行的工具

五、
ASP.NET回传机制

无论你执行那一段服务器代码,对应的页面的Page_Load都将会被调用,这也就意味着页面在刷新;

第一次:地址栏输入地址,回车,跳转一下;通过其他页面跳转到页面上

非第一次:在浏览器端已经拥有该页面,但是由于某些需要,需要刷新本页面或者执行功能,将自己当前拥有的该页面回传给了服务器,服务器就可以获得其中的信息,写代码,再把处理好的页面作为结果返回给你

isPostBack:第一次false非第一次true

如果是页面第一次加载才需要执行的页面初始化代码的一定需要写在if(!this.IsPostBack)的里面。

六、
WebSiteASP.NET网站WebApplicationASP.NET应用程序的区别和联系

1.
历史原因不同:WebApplication是独立考虑的项目类型,WebSite是考虑了之前ASP程序员的使用习惯;

2.
命名空间处理方式不同:WebSite采取的是大锅饭,所有的程序都在同一个命名空间中;WebApplication采取的是和Winform非常一致的方式,需要引入不同的命名空间才能访问其他命名空间下的类;

3.
编译时机不同:WebSite自动,测试更加方便WebApplication手动, 比较严谨

4.
硬盘初始位置不同:

WebSite默认放置在MyDocuments/Visual Studio 2010/WebSites/WebSiteName

WebApplication默认放置在

MyDocuments/Visual Studio 2010/Projects/SolutionName/WebApplicationName

5.
打开方式不同: WebSite打开-网站,打开后只出现和自己直接相关的解决方案和项目,WebApplication打开-项目,打开后出现所在的解决方案的所有内容

6.
使用场合不同:大型应用WebApplication 小型应用+学习培训WebSite

七、
Ashx一般处理程序,真正了解BS之间是如何交互的

1.
交互过程的三个步骤:

a)
请求:Browser发送给Server,附带交给ashx做,网页信息;

b)
处理:ashx处理,需要利用到接受来的网页信息

c)
响应:Server发送给Browser,html

2.
体验一下交互过程:

a)
请求:Form表单中的action

b)
响应:context.Response

c)
辅助知识点:context:http上下文

context.Response:下文,响应

ContentType:内容类型,一般来说就是text/html

Write():写回html

3.
体验了完整的交互过程

a)
接受网页信息:context.Request[“”],详情见代码注释

b)
处理:string.length

4.
保存原页面的基础加入处理结果

a)
直接书写HTML中body主体内容,在特定位置加入变量

b)
直接书写HTML中所有内容,在特定位置加入变量

c)
利用System.IO.File.ReadAllText以及文件硬盘全路径获取相应HTML中所有内容,在末尾处加入变量

d)
引入隐藏域,来存放处理结果

e)
文件硬盘全路径最好需要通过相对路径,context.Server.MapPath()可以将虚拟路径或者相对路径转换为服务器的硬盘文件全路径

5.
如果直接访问ashx,可能会导致Request[]为空,导致一系列错误,是否是回传

八、
表单提交以及提交方式的差异

1.
表单提交才意味着页面回传

2.
提交方式有两种Get(默认方式)Post

3.
差异:

传递方式差异:以Get方式来提交数据,会将表单元素中各个元素的Name和Value组成Name=Value的键值对形式,再通过&连接各个键值对,直接将其放置在url中提交给服务器;以post方式来提交数据,是将数据封装在http头报文中,传递给服务器的

安全性差异:Get更加直观,但是不够安全,Post较为安全

访问方式差异:Get方式的标准取值方法context.Request.QueryString[keyName]
Post方式的标准取值方法context.Request.Form[keyName],两种取值方式结合在一起就变成context.Request [keyName]
提交数据容量差异:Get方式提交的数据只能2K,Post方式理论上是没有上限的,但是发布网页的服务器例如window.IIS,80K 100K
4.
使用场合:

Post:适合安全性更高的操作,适合数据量更大的操作(增改功能)

Get:适合没有太多安全性要求的操作,适合数据量有限的操作(查删功能)

九、
ViewState原理分析

1.
表单提交引发服务器代码执行,提交都是表单元素,例如带有name的input元素、textarea、select,其他内容提交不上去,就意味着数据要丢失

2.
原理:HTTP协议是无状态的,记忆不住上次访问或者提交的任何数据的

3.
ViewState出现的原因就是无法保持非表单元素的上次提交的数值,就将非表单元素自动放置隐藏域中保存,两边捆绑从而实现非表单元素的数值保存

4.
区分控件的选择:

普通服务器控件:从数量和功能来看,是远远超过Html控件的,代码中默认是可见的

Html控件:基本上是基于表单元素的,默认是不可访问的,直到你在属性中加上runat=”server”

5.
验证ViewState的存在:ViewStateDecoder2.0

6.
ViewState适用场合:页面级的保存,通过隐藏域实现的,能够代码处理显得方便,无限接近于Winform。在前台和用户直接关联的页面中不建议使用太多,不得已再用;如果处于局域网,使用人数有限,一般都是系统后台管理界面,大量使用ViewState。www.sina.com.cn www.sinaman.com.cn

负面作用:

如果过多就会加重服务器负担、数据流量过大

7.
ViewState使用方法:

隐式使用:是没有主动些具体的ViewState读写操作,但是利用ASP.Net系统机制保存了过多非表单元素的内容,导致页面交互时数据流量过大

显式使用:ViewState[keyName]返回的是Object

8.
ViewState禁用:只对非表单元素产生作用,表单元素的值的传递和保存使用的是表单元素的提交方式,而不依赖于ViewState(自动生成的隐藏域)

控件级禁用:在控件声明处加入EnableViewState="false"(如果是html控件,则enableviewstate=" false ")
页面级禁用:在页面的Page指令中加入EnableViewState="false"

应用程序级禁用:在web.config中system.web的节点下加入以下内容
<pages enableViewState="false"></pages>
9.
Config配置文件

Web.config配置文件的作用:应用程序级的配置文件,一个文件夹下一个,设置配置,当发生冲突时,采取就近原则

Machine.config配置文件:服务器级所有应用程序的配置文件,一个服务器一个,设置基础配置,同时定义了Web.config配置标准,利用Section SectionGroup

10.
Page介绍:

所有WebForm都继承于System.Web.UI.Page类

要声明这个类,就需要有Page指令

默认情况之下,Page指令有几个属性需要设置:language atuoEventWireup CodeFile Inherits

每一个页面最少有两个文件与之相对应:

WebFromClassName.aspx(页面显示代码)

WebFromClassName.aspx.cs(页面触发事件代码文件)

WebFromClassName.aspx.designer.cs(页面所需元素文件)
作为分布类的一部分,最终形成一个类,实例化出对象,展示给用户
十、
Cookie原理及使用

1.
Cookie典型应用:登陆邮箱,输入用户名和密码,Cookie保存的是你在该网站登陆过的用户名

2.
Cookie使用过程:

请求:浏览器端向服务器端发出请求,提交浏览器端所浏览的网页的表单元素数据以及在本地该网站有关的所有Cookie

处理:程序会利用Asp.NET的系统对象Cookie来存放传递过来的所有Cookie信息,并进行相应的处理,增加、删除、修改

响应:服务器端向浏览器端发出信息,主要是包含html信息,同时将处理完的Cookie对象返回给浏览器端,更新浏览器端本地Cookie

3.
Cookie特定作用:弥补非表单元素还有部分信息需要保留,和利用隐藏域有所区别,隐藏域的保存只是在这次浏览过程中,Cookie保存是在当前浏览器端的所位于的机器上,相当于C/S中QQ登陆

4.
处理过程如何使用

读取Cookie:this.Request.Cookies[keyName][.Value]
新增Cookie: this.Response.Cookies.Add(new HttpCookie(keyName, value));
修改Cookie:this.Response.Cookies[keyName].Value
删除Cookie:this.Response.Cookies.Remove(keyName)
5.
深入HttpCookie

有效期:httpCookieObjectName.Expires设置该Cookie的过期时间

出现另外一种删除方式:设置该Cookie的有效期是过去的时间,自动删除

httpCookieObjectName.Values证明一个Cookie可以存放多个值

6.
aspx和ashx之间的联系

aspx继承Page,Page继承TemplateControl IHttpHandler ashx直接继承IHttpHandler

有一个对象就是HttpContext上下文对象,拥有属性Response Resquest

Aspx就将这些特别常用的属性为了方便使用进行了进一步的封装,隐藏了部分原理

public httpResponse Response

{

Get { return this.httpContext.response;}

}

7.
Cookie注意事项:

Cookie不适合大数据量的内容,所以Cookie的值就是String类型

Cookie不能存放太机密的数据,因为Cookie最终存放在浏览器端

Cookie是机器级的保存

Cookie整体来看可以看做键值对,值可能也是一组键值对

十一、
Session原理及使用

Session使用方法:this.Session[keyName]

IDictionary<string,IDictionary<string,object>>

Session注意事项:

Session可以存放比Cookie更大数据量的内容,所以Session[keyName]是Object类型

Session是存放在服务器端,比浏览器端安全,可以存放私密一点的内容

Session是一个分用户站点级的保存

TextBox中的TextChanged事件如果不被触发,可能的原因是什么?

TextBox的AtuoPostBack=false

Type=”button” onclick=” Document.GetElementById(“formName”).submit();”

Type=”text” onmouseout=” Document.GetElementById(“formName”).submit();”
十二、
四大系统对象存储数据分类和差别

Cookie

Session

Application

Server

按照数据存储位置来区分,Cookie浏览器端其余都在服务器端,安全性差异

按照是否有用户权限来区分,Session是分用户,Application/Server都是全局性的

按照是否只属于本网站或者本应用程序,Application指向当前应用程序,Server指向当前应用程序所位于的服务器上的所有应用程序

十三、
登陆暴力破解

十四、
注册机器人

netyi.com

十五、
如何避免被暴力破解或者恶意注册

1.
验证码

A.
白色底色上有一串不常规的英文和数字,同时有一些不规则的线条在其中;

B.
回答问题?网站的首页的网址是多少、域名是什么

C.
N+N=N

十六、
HTTP协议部分内容

1.
断点续传的原理了解:

发出请求Request:http:/www.sina.com.cn/images/sports.rar

TCP/IP得出www.sina.com.cn,对照dns服务器得出要下载的服务器的ip地址

传输过去的数据有请求本身、ip地址、用户权限等信息

一个文件太大,就需要分解,按照一定的协议和标准

多线程下载:1G 100个10M 1-10 10-20 21-30

按照一定的协议和标准,将分解好的包再整合一下

2.
超文本传输协议,是web开发的基础性协议。可以说没有Http,就没有Web

3.
版本http/1.1(最常用) http/1.0 http/0.9

4.
工具:

HttpDebugBar6.4:免费工具,用于监测本机正在浏览的网站HTTP请求

HttpWatch:收费工具,用于监测本机正在浏览的网站HTTP请求,功能更加强大,细节更加突出

HttpAnalyzer:收费工具,用于监测本机所有HTTP请求,包含迅雷、sogou更新服务、遨游登陆同步收藏

5.
请求-处理-响应模式

发送

推送:服务器主动向浏览器端提供服务

假推送:浏览器端安装了软件,定期快速的向服务器在后台发出请求

真推送:发送了一次请求,引发了无数次的响应

6.
浏览器端输入一个url进行访问可能会引发多个Request请求

将页面所需不同类型的内容分布在不同的请求,例如主页面请求是一个请求,返回的是txt/html,验证码请求也是一个请求,返回的就是image/Jpeg

txt/html 、image/Jpeg图片占用资源多,同一个页面的不同请求使用相同的连接

连接:类似于SqlConnection,就需要连接浏览器端和服务器端的数据传输通道。请求完毕后自动注销掉。

GET /SystemObjectDemo/LoginWithValidateDemo.aspx HTTP/1.1 通过什么网址利用什么协议,采用什么方式进行表单提交

Accept:*/*能够接受哪些数据类型 txt/plain文本型 txt/html网页 image/jpeg图片 image/gif动态图片 application/x-javascriptJs代码文件 application/x-excls

Excls表格

Accept-Language: zh-cn网页采用语言,通过对请求中语言的判断,然后转接不同的界面

User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E):浏览器版本信息

Accept-Encoding: gzip, deflate网站可以接受压缩算法

Host: localhost:16081:主机地址

Connection: Keep-Alive:同一个页面的请求采用同一个连接来处理

Cookie: ASP.NET_SessionId=ovmvy0wx0y1utnopoax4jsqy通过Cookie传递给服务器自己的SessionId,方便服务器取出对应的Session进行访问

HTTP/1.1 200 OK:使用的什么协议,返回响应结果编码

200OK访问成功

301MovedPermanently永久转移

302Found暂时转移

307TemporaryRedirect临时重定向

400BadRequest发出错误请求或者请求不符合HTTP协议的请求

401Unauthorized未认证

403Forbidden禁止访问

404NotFound你所访问的页面不存在

500InternalServerError内部服务器错误

503ServiceUnavaiable访问人数过多,导致服务不可用

200+成功

300+服务器转换请求

400+自己所发的请求出现问题

500+服务器本身出现的问题

Server: ASP.NET Development Server/10.0.0.0:访问网站所架设的服务器版本信息,比如C#多半使用IIS,IIS版本

Date: Tue, 08 Jan 2013 07:14:12 GMT:网页开发时间

X-AspNet-Version: 4.0.30319:用于编译ASP.NET版本

Cache-Control: private:缓存控件是否对外公开

Content-Type: text/html; charset=utf-8:返回内容的数据类型

Content-Length: 2292:返回内容的字节长度

Connection: Close:响应完毕关闭连接

十七、
ASP.NET运行环境

1.
ASP.NET代码位置:

C#代码是执行在服务器端的代码,HTML.JS代码是执行在浏览器端的代码

A.
一次点击可能会引发服务器端或者浏览器端两边的代码的执行:

JS代码执行在浏览器端,在aspx运行页面的源代码可以直接看到

C#代码执行在服务器端,浏览器端无法看到C#代码

B.
某一句C#代码向浏览器端响应了一段JS代码

C#代码向浏览器端响应了一段JS代码

JS代码在浏览器端被执行了

C.
一句C#代码在B/S网站中访问了C/S的对话框

对话框是显示在服务器端还是浏览器端?服务器端无法用HTTP协议来传输一个Winform对话框,C#代码是执行在服务器端的代码,显示在服务器端

时间是显示的服务器端的时间还是浏览器端的时间?C#代码是执行在服务器端的代码,只能取出服务器端的时间

2.
担任B/S网站不同角色的机器看待C#代码和JS代码是不同的:

服务器端看C#代码就是C#,看JS代码就是字符串

浏览器端看不到C#代码,看到的是C#代码通过Asp.NET引擎所自动生成的HTML.JS代码,看HTML.JS代码就是去解释HTML.JS代码

3.
网站不发布为什么可以运行?

因为调试代码时会自动调用安装VS2010的免费服务器CassiniDev.exe

都会将网站发布在CassiniDev.exe上,然后模拟真实的请求-处理-响应模型

CassiniDev.exe是免费的开源的轻量级的,所以不能进行权限设置等高级服务器设置;

CassiniDev.exe默认情况下只识别回环地址LoopBack,127.0.0.1,localhost

AnyIP任意IP:将ip设置为0.0.0.0

对于ASP.NET就是IIS

对于Java虚拟机就是Tomcat

十八、
ASP.NETWeb开发原则

1.
最小权限原则:让用户在某时获得一个功能单一的页面,明确用户可以做什么,而不是去明确用户不能做什么

2.
能在浏览器端执行的,就不交到服务器端执行

3.
不能将敏感数据、复杂运算、业务规则放在浏览器端,这些内容不适合直接暴露在用户面前

4.
浏览器所传输过来的数据有时是不可信的

5.
浏览器代码测试完一遍,有时候仍然还需要服务器端代码:表单提交验证

浏览器端代码定位:用户体验

服务器代码定位:功能,尤其是复杂的需求,也称之为最后一道防线

例题1:验证登陆时用户名和密码是否为空

浏览器端和服务器端都可以验证,两边的代码都需要写,服务器代码是必不可少,浏览器端代码是提升用户体验的,现在正在变得普及和不可或缺。

例题2:登陆不成功之后转入错误提示的页面时,改变其url

通过url来传输非法数据,XSS跨站点脚本攻击,JS脚本、表单都可以传递

方案一:认为该网站不能传递JS脚本和表单

默认情况下,ASP.NET页面是会进行自动的Request检测的,JS脚本、表单会被认为是危险数据的,从而爆发异常,报错。

方案二:认为该网站传递JS脚本是合法的

取消页面级的ValidateRequest=false禁用状态

在web.config中的System.web节点下添加该信息

<httpRuntime requestValidationMode="2.0" />

Literal控件:Mode:Encode,会将适当的html代码转换为转义序列,从而看做是字符串
例题3:浏览器端代码完全适合的情况,界面中的隐藏部分层
例题4:服务器端代码完全适合的情况。
十九、
虚拟路径运算符~

1.
/代表网站根目录

2.
../代表当前文件所属目录的上级目录

3.
./ 代表当前文件所属目录

4.
~代表虚拟网站/应用程序根目录

5.
应用程序根目录和网站根目录的区别和原理

应用程序根目录http://localhost:1584/PathAndSystemObjectDemo/

网站根目录http://localhost:1584/

原理:默认情况下,将website作为一个网站的虚拟目录,http://loaclhost:NNNN/WebSiteName/
6.
~的执行过程:只能在ASP.NET程序的服务器控件中书写,其他编程语言所没有,同时HTML也不能识别的内容,ASP.NET引擎会去进行默认的翻译

7.
了解VirtualPathUtility类的常用方法

GetFileName

GetExtension

GetDirectory

IsAbsolute

IsAppRelative

ToAppRelative

Combine

AppendTrailingSlash

二十、
Request对象=this.Request(aspx)context.Request(ashx)=HttpRequest类实例化对象

Cookies:读取浏览器端传递过来的所有Cookie对象

*Path*:了解

User*:了解

MapPath:将虚拟路径转换为物理硬盘路径

UserReferrer:请求的url,获取其host

二十一、
Response对象

Redirect:

定位:重新定向

原理:一个请求被返回302Found,重新再发出请求200OK,从而得到新的页面

表相:浏览器端可以感觉到地址栏的变化

随便定向与任何可定向的对象,包括网站内外,包括各种类型的数据

Cookies:处理响应的Cookie对象集合

SetCookie:设置Cookie,如果没有Cookie就添加Cookie,如果有就更改Cookie

OutputStream:输出流,正常返回的是非文本型数据,比较复杂得文本型数据也可以使用

Write:文本型数据

响应缓冲机制:

BufferOutput(Buffer):bool,是否等整个请求都缓冲完毕再一次性返回给浏览器端

True:整个请求全部缓冲完毕再一次返回给浏览器端,整个请求按照一定的机制在一定阶段分步骤的返回,缓冲大小256字节

False: 一有缓冲就返回

Flush:将缓冲区的内容强制返回给浏览器端

Clear:将缓冲区的内容清空

ContentEncoding:内容字符集
ContentType:内容类型
WriteFile:写入一个文件
二十二、
Server对象

MapPath:两者之间的区别

Transfer:

定位:内部重新定向

原理:一个请求,处理指向了另外一个网页,200OK,从而得到新的网页来替换现在的网页

表相:地址栏的跳转和变化是直接在服务器内部完成的,浏览器端一无所知,连地址栏都没有变化

只可以访问本网站内的对象,同时对ashx的对象也没有权限,否则就会报错执行子对象报错

HTMLDecode

HTMLEncode

UrlDecode

UrlEncode

页面生存周期:

系统对象的适用场合的考察:Request Respon Server Cookie Application Context

请求-处理-响应模式:

Request、Server MapPath的区别:

Redirect、Transfer:

服务器端代码和客户端代码:代码执行位置和内容、代码书写位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: