none
进行url重新时遇到个问题,请教 RRS feed

  • 问题

  • 我使用几个继承至IHttpHandler的类截取请求的URL。web.config中已经进行了相关配置。代码如下:
            public void ProcessRequest(HttpContext context)
            {
                string requestURL = context.Request.RawUrl;
                context.Server.Transfer(requestURL);
            }
    但每次执行到context.Server.Transfer(requestURL); 时会出现异常:  HtppException    为 /default.aspx 执行子请求时出错。
    这是怎么回事?我应该怎么处理?

    郭鹏
    2009年9月11日 15:57

答案

全部回复

  • context.Server.Transfer?感觉你的url没有什么变化啊,没有重写,
    【孟子E章】
    • 已标记为答案 Hugo12345 2009年9月16日 5:48
    2009年9月11日 23:59
    版主
  • 恩,是没有进行重写。但是我不知道为什么执行这个请求会出错。完整的重写代码如下:

    HttpContext context = ((HttpApplication)sender).Context;
                string requestURL = context.Request.RawUrl;
                string sendTo = requestURL;
                if(requestURL.EndsWith("aspx?"))
                {
                    requestURL = requestURL.Substring(0, requestURL.Length - 1);
                }
                if (requestURL.EndsWith("aspx"))
                {
                    SinoSpace.RewriteSupport.UrlRewriteConfiguration rewrite =
                        new SinoSpace.RewriteSupport.UrlRewriteConfiguration("page");
                    string path = rewrite.FindWriteTo(requestURL);
                    if (!String.IsNullOrEmpty(path))
                    {
                        sendTo = path;
                    }
                    context.RewritePath(sendTo);
                }
                else if (requestURL.EndsWith("js"))
                {
                    requestURL = requestURL.Substring(requestURL.LastIndexOf("Script"));
                    context.RewritePath(requestURL);
                }
                else if (requestURL.EndsWith("jpg") || requestURL.EndsWith("gif") ||
                    requestURL.EndsWith("png"))
                {
                    try
                    {
                        requestURL = requestURL.Substring(requestURL.LastIndexOf("images"));
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        requestURL = requestURL.Substring(requestURL.LastIndexOf("flash"));
                    }
                    context.RewritePath(requestURL);
                }
                else if (requestURL.EndsWith("css"))
                {
                    requestURL = requestURL.Substring(requestURL.LastIndexOf("Css"));
                    context.RewritePath(requestURL);
                }
    这个块代码我是写在继承至HttpModule类中的。应为如果我执行这样的请求/Login/abc.aspx 在服务器执行的页面应该是/Login.aspx?r=abc。这样的页面是可以请求到的。但是在请求这个页面里的css js等文件时,他的请求路径就变了,如请求/images/1.jpg 就变成了/Login/images/1.jpg。所以我也处理了请求css js img等文件的请求路径。但是我不知道为什么。页面是请求到了。所有css js img还是无法获得。 
    郭鹏
    2009年9月12日 7:01
  • 你好,

    资源文件路径使用绝对路径试试。


    Microsoft Online Community Support
    2009年9月14日 3:38