自定义httphandler在执行重写路径时抛出异常

时间:2011-02-26 01:28:40

标签: c# asp.net

我想重定向到应用程序根级别的文件,但是我收到以下错误。

我做了以下事情来实现相同的目标

  1. 我在root下有一个虚拟目录,它是样本
  2. 添加了一些自定义名称的处理程序,例如.zpy,它解析为.net root / sample(sample是一个虚拟目录)
  3. 在web.config中添加了映射

    <add verb="*" path="*.zpy" type="MyUrlHttpHandler, WebProj"/>
    
  4. 这是代码

    string finalUrl= "http://www.test.com/test.asp";
    context.RewritePath(finalUrl);
    IHttpHandler hnd = PageParser.GetCompiledPageInstance(finalUrl, null, context);
    hnd.ProcessRequest(context);
    
  5. 我收到以下错误

    http://www.test.com/test.asp不是有效的虚拟路径。

    代码正在执行,但我无法将请求发送到test.asp,该请求正在执行 根级别。

    我尝试将处理程序移动到root并在根级别拥有处理程序,但它仍然抛出相同的错误

    异常堆栈跟踪

    HttpException (0x80004005): 'http://locwww.test.com/test.asp' is not a valid virtual path.]
       System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options) +8855691
       System.Web.HttpContext.RewritePath(String path, Boolean rebaseClientPath) +116
       System.Web.HttpContext.RewritePath(String path) +6
       ADC.Web.Code.ApcUrlHttpHandler.ProcessRequest(HttpContext context) in C:\Projects\webproj\urlHttpHandler.cs:30
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
    

3 个答案:

答案 0 :(得分:3)

你所做的事情毫无意义。 “http://www.test.com/test.asp”文件是asp.net文件吗?如果没有,则无法获得已编译的页面实例!

请尝试使用Response.Redirect或Server.Transfer。

答案 1 :(得分:2)

鉴于您在其他地方的讨论,如果您真的对重定向感到满意,那么这很简单:

Response.Redirect("http://www.test.com/test.asp", true);

这比尝试从此请求提供原始内容要简单得多。

答案 2 :(得分:2)

如果您尝试重定向到根文件夹中的页面/处理程序,那么使用此路径很简单:〜/ mypage.aspx。

而不是使用ReWritePath以及您在处理程序中执行的所有其他操作,只需使用

Response.Redirect("~/test.asp");

这样做的好处是可以在开发环境和生产环境中工作,因为您不需要对完整的URL进行硬编码。即使应用程序位于子文件夹中,ASP.NET也会将“〜/”解析为应用程序的根目录。