ASP.NET:ジェネリックハンドラーからファイルの仮想パスを取得する方法は?

StackOverflow https://stackoverflow.com/questions/5386412

質問

ジェネリック.ASHXハンドラー内から、ブラウザに適したファイルへの仮想パスをパスに解決するにはどうすればよいですか?

たとえば、変換したい:

~/asp/ClockState.aspx

の中へ

/NextAllowed/asp/ClockState.aspx

私がウェブフォームだったら Page, 、電話することができます ResolveUrl:

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

これは次のとおりです。

/NextAllowed/asp/ClockState.aspx

しかし、私はウェブフォームページではなく、一般的なハンドラーです。あなたは知っています、それ 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; } }
}
役に立ちましたか?

解決

VirtualPathutilityクラスを使用してこれを行うことができます。これには、パスを操作するためのさまざまな方法が含まれています。必要なものはtoabsolute()です。これは、相対パスを絶対的なパスに変換します。

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

ただし、とにかくreponse.redirect呼び出しでTildeを使用できます。そのため、以下はまだ機能します。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top