5

一般的な .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; } }
}
4

1 に答える 1

7

これを行うには、VirtualPathUtility クラスを使用できます。これには、パスを操作するためのさまざまなメソッドが含まれています。必要なのは、相対パスを絶対パスに変換する ToAbsolute() です。

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

ただし、とにかく Response.Redirect 呼び出しでチルダを使用できるため、以下は引き続き機能します。

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

Response.Redirect を使用する前に、URL を絶対パスに変換する必要はありません。

于 2011-03-22T03:41:30.023 に答える