3

我正在编写一个通用库供我所有的网络项目使用。其中一项功能是永久重定向,如下所示:

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 回答