3

すべての Web プロジェクトで使用する汎用ライブラリを作成しています。関数の 1 つは、次のような永続的なリダイレクトです。

public static void PermanentRedirect(string url, HttpResponse response, bool endResponse)
{
    url = //resolve url here. how?

    response.Status = "301 Moved Permanently";
    response.AddHeader("Location", url);

    if (endResponse) response.End();
}

にアクセスするために現在のページを渡さなくても URL を解決するにはどうすればよいPage.ResolveUrlですか? メソッドの署名を変更することはできますが、API に負担がかかると思うので、変更しないことをお勧めします。

これにはいくつかのオーバーロードがあるため、希望する使用法は次のとおりです。

WebUtility.PermanentRedirect("~/somewhere/somepage.aspx")
4

3 に答える 3

4

HttpRuntime.AppDomainAppVirtualPathをチルダの直接の代替として使用できると思います。

VirtualPathUtility.ToAbsoluteを使用することもできますが、クエリ文字列が好きではないため、それらを解析する必要があります (または、できれば UriBuilder を使用します)。

ああ、トピックから外れていますが、私見では HttpResponse の拡張メソッドを使用すると、構文が少し簡単になります。

于 2012-05-01T21:36:55.627 に答える
2

この方法は機能するはずです:

url = VirtualPathUtiliy.ToAbsolute(url);
于 2012-05-01T21:31:33.453 に答える
1

次の方法で現在のページ インスタンスを取得できますHttpContext.Handler

var page = HttpContext.Current.Handler as Page;
if (page != null)
{
     // Use page instance, f.e. page.Request.Url;
}

ちなみに、次のHttpResponseいずれかを渡す必要はありません。

HttpResponse response = HttpContext.Current.Response;

http://msdn.microsoft.com/en-us/library/system.web.httpcontext.response.aspx

于 2012-05-01T21:18:41.270 に答える