'Global.asax
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
'在应用程序启动时运行的代码
Dim RequestUrl As String = HttpContext.Current.Request.RawUrl
Dim VisualUrl As String = "^(.+)Action/(\d+)\.aspx(\?.*)*$"
Dim RealUrl As String = "$1default.aspx?action=$2"
If Regex.IsMatch(RequestUrl, VisualUrl, RegexOptions.IgnoreCase Or RegexOptions.Compiled) Then
Dim NewUrl As String = Regex.Replace(RequestUrl, VisualUrl, RealUrl, RegexOptions.Compiled Or RegexOptions.IgnoreCase)
Context.RewritePath(NewUrl)
End If
End Sub'default.aspx
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.SecurityPartial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Request.QueryString("action") <> Nothing Then
Response.Write(Request.QueryString("action").ToString())
End If End Sub
End Class这样写好后第一次提交http://127.0.0.1/Action/1187.aspx
能打出1187 接着刷新就变成了无法找到资源。
太郁闷了
在本人拙作《ASP.NET夜话》第十二章中探讨过ASP.NET底层运行机制的问题,在该书中本人也讲到过了解一些ASP.NET的低层机制对于我们灵活控制ASP.NET有很大帮助,在该书中本人讲述过如何用自定义的IHttpHandler来实现防盗链功能,由于篇幅限制在该书中没有讲述自定自定义IHttpModule可以实现什么样的效果,在本篇将讲述利用自定义IHttpModule来实现URL地址重写。
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
'在应用程序启动时运行的代码
Dim RequestUrl As String = HttpContext.Current.Request.RawUrl在 Application_Start的时候不会有HTTP上下文也就是HttpContext.Current.Request为Nullhttpcontext直到用户请求的时候
如Begin_Request之后才会有httpcontext
那第一次请求为什么会有结果呢?PS:IHttpModule 是。NET2。0的内置接口吗?
http://msdn.microsoft.com/zh-cn/library/system.web.httpcontext(VS.80).aspx
HttpContext 类封装有关个别 HTTP 请求的所有 HTTP 特定的信息。建议你了解一下asp.net的global.asax的相关事件管道说明与httpcontext的相关信息再来进行编码.