ASP.NET:如何从通用处理程序获取文件的虚拟路径?

Ian*_*oyd 5 asp.net resolveurl resolveclienturl

如何在通用.ashx处理程序中将文件的虚拟路径解析为适合浏览器的路径?

例如,我想转换:

~/asp/ClockState.aspx
Run Code Online (Sandbox Code Playgroud)

/NextAllowed/asp/ClockState.aspx
Run Code Online (Sandbox Code Playgroud)

如果我是WebForm Page,我可以打电话ResolveUrl:

Page.ResolveUrl("~/asp/ClockState.aspx")
Run Code Online (Sandbox Code Playgroud)

解析为:

/NextAllowed/asp/ClockState.aspx
Run Code Online (Sandbox Code Playgroud)

但我不是WebForm页面,我是一个通用的处理程序.你知道,IHttpHandler注入各种东西的那个对象:

public class ResetClock : IHttpHandler 
{
    public void ProcessRequest (HttpContext context) 
    {
        //[process stuff]

        //Redirect client
        context.Response.Redirect("~/asp/ClockState.aspx", true);
    }

    public bool IsReusable { get { return false; } }
}
Run Code Online (Sandbox Code Playgroud)

Mun*_*Mun 7

您可以使用VirtualPathUtility类来执行此操作.这包含使用路径的各种方法.你需要的是ToAbsolute(),它将相对路径转换为绝对路径.

var path = VirtualPathUtility.ToAbsolute("~/asp/ClockState.aspx");
Run Code Online (Sandbox Code Playgroud)

但是,您仍然可以在Response.Redirect调用中使用代字号,因此以下内容仍然有效:

Response.Redirect("~/asp/ClockState.aspx");
Run Code Online (Sandbox Code Playgroud)

在使用Response.Redirect之前,您无需将URL转换为绝对路径.