ASP.NET 问题集锦
【1】解决错误:从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值
.NetFrameWork 4.0 Validaterequest="false"不起作用,需要恢复到2.0的ASP.NET请求验证功能的行为,要在以下设置 Web.config文件中的system.web节点修改 requestValidationMode 的值为“2.0”:
<httpRuntime requestValidationMode="2.0"/>
值得注意的是,需要同时在页面和配置文件里配置 Validaterequest="false" 才会生效。即使是.NetFrameWork 4.0 或者 .NetFrameWork 4.5,也可以使用2.0的验证方式。
不过这样做会增加网站的安全风险,需要谨慎使用。
【2】HttpWebResponse请求状态码
通过HttpWebResponse.StatusCode来判断当前请求返回的状态信息。状态码详细信息如下表:
成员名称 |
说明 |
Continue |
等效于 HTTP 状态 100。Continue指示客户端可能继续其请求。 |
SwitchingProtocols |
等效于 HTTP 状态 101。SwitchingProtocols指示正在更改协议版本或协议。 |
OK |
等效于 HTTP 状态 200。OK指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码。 |
Created |
等效于 HTTP 状态 201。Created指示请求导致在响应被发送前创建新资源。 |
Accepted |
等效于 HTTP 状态 202。Accepted指示请求已被接受做进一步处理。 |
NonAuthoritativeInformation |
等效于 HTTP 状态 203。NonAuthoritativeInformation指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。 |
NoContent |
等效于 HTTP 状态 204。NoContent指示已成功处理请求并且响应已被设定为无内容。 |
ResetContent |
等效于 HTTP 状态 205。ResetContent指示客户端应重置(或重新加载)当前资源。 |
PartialContent |
等效于 HTTP 状态 206。PartialContent指示响应是包括字节范围的 GET 请求所请求的部分响应。 |
MultipleChoices |
等效于 HTTP 状态 300。MultipleChoices指示请求的信息有多种表示形式。默认*作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。 |
Ambiguous |
等效于 HTTP 状态 300。Ambiguous指示请求的信息有多种表示形式。默认*作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。 |
MovedPermanently |
等效于 HTTP 状态 301。MovedPermanently指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。 |
Moved |
等效于 HTTP 状态 301。Moved指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
Found |
等效于 HTTP 状态 302。Found指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
Redirect |
等效于 HTTP 状态 302。Redirect指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 |
SeeOther |
等效于 HTTP 状态 303。作为 POST 的结果,SeeOther将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 |
RedirectMethod |
等效于 HTTP 状态 303。作为 POST 的结果,RedirectMethod将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。 |
NotModified |
等效于 HTTP 状态 304。NotModified指示客户端的缓存副本是最新的。未传输此资源的内容。 |
UseProxy |
等效于 HTTP 状态 305。UseProxy指示请求应使用位于 Location 头中指定的 URI 的代理服务器。 |
Unused |
等效于 HTTP 状态 306。Unused是未完全指定的 HTTP/1.1 规范的建议扩展。 |
TemporaryRedirect |
等效于 HTTP 状态 307。TemporaryRedirect指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 |
RedirectKeepVerb |
等效于 HTTP 状态 307。RedirectKeepVerb指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认*作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。 |
BadRequest |
等效于 HTTP 状态 400。BadRequest指示服务器未能识别请求。如果没有其他适用的错误,或者如果不知道准确的错误或错误没有自己的错误代码,则发送BadRequest。 |
Unauthorized |
等效于 HTTP 状态 401。Unauthorized指示请求的资源要求身份验证。WWW-Authenticate 头包含如何执行身份验证的详细信息。 |
PaymentRequired |
等效于 HTTP 状态 402。保留PaymentRequired以供将来使用。 |
Forbidden |
等效于 HTTP 状态 403。Forbidden指示服务器拒绝满足请求。 |
NotFound |
等效于 HTTP 状态 404。NotFound指示请求的资源不在服务器上。 |
MethodNotAllowed |
等效于 HTTP 状态 405。MethodNotAllowed指示请求的资源上不允许请求方法(POST 或 GET)。 |
NotAcceptable |
等效于 HTTP 状态 406。NotAcceptable指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。 |
ProxyAuthenticationRequired |
等效于 HTTP 状态 407。ProxyAuthenticationRequired指示请求的代理要求身份验证。Proxy-authenticate 头包含如何执行身份验证的详细信息。 |
RequestTimeout |
等效于 HTTP 状态 408。RequestTimeout指示客户端没有在服务器期望请求的时间内发送请求。 |
Conflict |
等效于 HTTP 状态 409。Conflict指示由于服务器上的冲突而未能执行请求。 |
Gone |
等效于 HTTP 状态 410。Gone指示请求的资源不再可用。 |
LengthRequired |
等效于 HTTP 状态 411。LengthRequired指示缺少必需的 Content-length 头。 |
PreconditionFailed |
等效于 HTTP 状态 412。PreconditionFailed指示为此请求设置的条件失败,且无法执行此请求。条件是用条件请求标头(如 If-Match、If-None-Match 或 If-Unmodified-Since)设置的。 |
RequestEntityTooLarge |
等效于 HTTP 状态 413。RequestEntityTooLarge指示请求太大,服务器无法处理。 |
RequestUriTooLong |
等效于 HTTP 状态 414。RequestUriTooLong指示 URI 太长。 |
UnsupportedMediaType |
等效于 HTTP 状态 415。UnsupportedMediaType指示请求是不支持的类型。 |
RequestedRangeNotSatisfiable |
等效于 HTTP 状态 416。RequestedRangeNotSatisfiable指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。 |
ExpectationFailed |
等效于 HTTP 状态 417。ExpectationFailed指示服务器未能符合 Expect 头中给定的预期值。 |
InternalServerError |
等效于 HTTP 状态 500。InternalServerError指示服务器上发生了一般错误。 |
NotImplemented |
等效于 HTTP 状态 501。NotImplemented指示服务器不支持请求的函数。 |
BadGateway |
等效于 HTTP 状态 502。BadGateway指示中间代理服务器从另一代理或原始服务器接收到错误响应。 |
ServiceUnavailable |
等效于 HTTP 状态 503。ServiceUnavailable指示服务器暂时不可用,通常是由于过多加载或维护。 |
GatewayTimeout |
等效于 HTTP 状态 504。GatewayTimeout指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。 |
HttpVersionNotSupported |
等效于 HTTP 状态 505。HttpVersionNotSupported指示服务器不支持请求的 HTTP 版本。
|
【3】ASP.NET服务器端跳转页面的三种方法
1、Response.Redirect 这个跳转页面的方法跳转速度慢,因为它要走 2 次回发 (postback) ,不能跳过登录保护。
Redirect 跳转机制:首先是服务器端发送一个 http 请求到客户端,通知需要跳转到新页面,然后客户端再发送跳转请求到服务器端。需要注意的是跳转后内部空间保存的所有数据信息将会丢失,所以需要用到 session 。
2、Server.Transfer 速度快,只需要一次 postback ,但它必须是在同一个站点内跳转。
Server.Transfer 的重定向请求发生在服务器端,仅仅将此控件传递到新的网页并且不在客户端重新定位该网页,所以浏览器的 url 地址仍然是原页面的地址!另外,它能跳过登录保护 。默认情况下,Transfer 方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但是如果把该方法的第二个参数设置成 true ,就可以保留原先页面的表单数据和查询字符串。
Server.Transfer("test.aspx"); // 服务器停止执行本页,保存本页的当前数据后,再使页面转向 test.aspx ,并将跳转之前数据加上 test.aspx 页面执行的结果返回给浏览器。
3、Sever.Execute 这个方法主要是用在页面设计上,它必须是在同一个站点内跳转,也只需要一次 postback 。
这个方法是需要将一个页面的输出结果插入到另一个 aspx 页面的时候使用,大部分是在表格中将某一个页面类似于嵌套的方式存在于另一页面。
Server.Execute("test.aspx");// 服务器保存此页的当前数据后,使页面转向 test.aspx 执行,在 test.aspx 执行之后又返回本页继续执行,再将三者结果合并后返回给浏览器。Execute 方法跳转类似于函数调用。
如何选择页面重定向的方法:
asp.net 中页面跳转方式 ---- Redirect 、 Transfer 、 Execute 、超链接、 HyperLink 控件。
当需要把用户跳转到另一台服务器上的页面的时候 ,使用 Redirect
当需要把用户跳转到非 aspx 页面时候,如 html ,使用 Redirect
需要把查询字符串作为 url 一部分传给服务器的时候,使用 Redirect ,因为其他两种方法不能做到 2 次 postback ,把数据带回服务器
需要 aspx 页面间的转换(不涉及登录),使用 Transfer
当需要把 aspx 页面的输出结果插入到另一个 aspx 页面的时候使用 Execute 。
当需要用户来决定什么时候跳转页面,就使用超链接。
要用程序来控制转换的目标,但转换的时机由用户决定,使用 Web 服务器的 HyperLink 控件,动态设置其 NavigateUrl 属性。
【4】aspx 页面引用命名空间
单页面引用使用 <%@ Import Namespace="" %>。如果在配置文件(web.config)中设置,则所有页面都可以引用。
<system.web> ...... <pages> <namespaces> <add namespace="System" /> <add namespace="System.Collections" /> <add namespace="System.Collections.Specialized" /> <add namespace="System.Configuration" /> <add namespace="System.Text" /> <add namespace="System.Text.RegularExpressions" /> <add namespace="System.Web" /> <add namespace="System.Web.Caching" /> <add namespace="System.Web.SessionState" /> <add namespace="System.Web.Security" /> <add namespace="System.Web.Profile" /> <add namespace="System.Web.UI" /> <add namespace="System.Web.UI.WebControls" /> <add namespace="System.Web.UI.WebControls.WebParts" /> <add namespace="System.Web.UI.HtmlControls" /> </namespaces> </pages> ... </system.web>