ASP.NET: как получить виртуальный путь к файлу из универсального обработчика? - PullRequest
5 голосов
/ 22 марта 2011

Как я могу преобразовать виртуальный путь к файлу в подходящий для браузера путь из общего обработчика .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; } }
}

1 Ответ

7 голосов
/ 22 марта 2011

Вы можете использовать класс VirtualPathUtility, чтобы сделать это.Это содержит различные методы для работы с путями.Вам нужен ToAbsolute (), который преобразует относительный путь в абсолютный.

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

Однако вы можете использовать тильду в вызовах Response.Redirect в любом случае, так что следующее будет работать:

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

Вам не нужно преобразовывать URL-адрес в абсолютный путь перед использованием Response.Redirect.

...