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

发布于 2024-10-24 13:49:05 字数 791 浏览 1 评论 0原文

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

例如我想转换:

~/asp/ClockState.aspx

如果

/NextAllowed/asp/ClockState.aspx

我是一个 WebForm Page,我可以调用 ResolveUrl:

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

解析为:

/NextAllowed/asp/ClockState.aspx

But i'm not a WebForm Page, i'm a通用处理程序。你知道,那个 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; } }
}

How can i resolve a virtual path to a file into a path, suitable for the browser, from within a generic .ashx handler?

e.g. i want to convert:

~/asp/ClockState.aspx

into

/NextAllowed/asp/ClockState.aspx

If i were a WebForm Page, i could call ResolveUrl:

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

which resolves to:

/NextAllowed/asp/ClockState.aspx

But i'm not a WebForm Page, i'm a generic handler. You know, that IHttpHandler object with all kinds of things injected:

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; } }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

糖粟与秋泊 2024-10-31 13:49:05

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

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

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

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

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

You can use the VirtualPathUtility class to do this. This contains various methods for working with paths. The one you need is ToAbsolute(), which will convert a relative path to an absolute one.

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

However, you can use the tilde in Response.Redirect calls anyway, so the following would still work:

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

You do not need to convert the URL to an absolute path before using Response.Redirect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文