我想重定向到应用程序根级别的文件,但是我收到以下错误。
我做了以下事情来实现相同的目标
在web.config中添加了映射
<add verb="*" path="*.zpy" type="MyUrlHttpHandler, WebProj"/>
这是代码
string finalUrl= "http://www.test.com/test.asp";
context.RewritePath(finalUrl);
IHttpHandler hnd = PageParser.GetCompiledPageInstance(finalUrl, null, context);
hnd.ProcessRequest(context);
我收到以下错误
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
答案 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也会将“〜/”解析为应用程序的根目录。