【问题标题】:ASP.NET: How to get the virtual path of a file from a generic handler?ASP.NET:如何从通用处理程序中获取文件的虚拟路径?
【发布时间】:2011-03-22 03:27:50
【问题描述】:

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

例如我想转换:

~/asp/ClockState.aspx

进入

/NextAllowed/asp/ClockState.aspx

如果我是 WebForm Page,我可以调用 ResolveUrl

Page.ResolveUrl("~/asp/ClockState.aspx")

解析为:

/NextAllowed/asp/ClockState.aspx

但我不是 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; } }
}

【问题讨论】:

    标签: asp.net resolveurl resolveclienturl


    【解决方案1】:

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

    var path = VirtualPathUtility.ToAbsolute("~/asp/ClockState.aspx");
    

    但是,无论如何,您都可以在 Response.Redirect 调用中使用波浪号,因此以下方法仍然有效:

    Response.Redirect("~/asp/ClockState.aspx");
    

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

    【讨论】:

    • 我以为我只是简单地尝试了Response.Redirect(...),但它没有考虑到虚拟文件夹。但是VirtualPathUtilityRedirect 都可以工作。 +1 已接受。
    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2010-10-30
    • 2011-08-16
    • 2012-05-23
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多