1

目前我的产品页面网址是

http://www.localhost:80/products/default.aspx?code=productCode

我想访问产品页面

http://www.localhost:80/productCode

我为此使用了 HTTP 模块。

public class UrlRewritingModule : IHttpModule

{

        public void Dispose()
        {

        }
        public void Init(HttpApplication context)
        {
            context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);

           context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);


        }  
        void context_AuthorizeRequest(object sender, EventArgs e)
        {
             HttpContext context = ((HttpApplication)sender).Context;
            if (some condition)
            {
               context.RewritePath(url);
             }
        }
        void context_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            //We set back the original url on browser
            HttpContext context = ((HttpApplication)sender).Context;

            if (context.Items["originalUrl"] != null)
            {
                context.RewritePath((string)context.Items["originalUrl"]);
            }
        }
}

我已经在 web.config 中注册了它,它工作正常。但是当我在 IIS 中部署它时,会话和应用程序变量不会抛出空引用异常。

谁能帮我?

编辑:是否需要额外的代码来访问重写 URL 的会话/应用程序变量?

4

2 回答 2

0

您是否尝试过使用 HTTPContext.Current?

于 2012-10-15T13:20:12.377 回答
0

通过在 web.config 的模块中添加runAllManagedModulesForAllRequests="true"属性,我能够解决问题(访问由自定义处理程序重写的后续页面中的会话和应用程序变量) 。

于 2012-10-17T12:13:06.030 回答