2011-03-22 17 views
5

Bir sanal yolu, tarayıcıya uygun bir yoldaki bir dosyaya genel bir .ashx işleyicisinden nasıl çözebilirim?ASP.NET: Bir dosyanın sanal yolunu genel işleyiciden nasıl edinebilirim?

örn.

~/asp/ClockState.aspx 

ResolveUrl

/NextAllowed/asp/ClockState.aspx 

içine i WebForm Page olsaydı, ben diyebiliriz: i dönüştürmek istediğiniz

/NextAllowed/asp/ClockState.aspx 
: yönlendirdiği

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


Ancak WebForm Sayfası değilim, genel bir işleyici değilim. Bazı şeyleri her türlü IHttpHandler nesne enjekte ki biliyorum:

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; } } 
} 

cevap

7

Bunu yapmak için VirtualPathUtility sınıfını kullanabilirsiniz. Bu, yollarla çalışmak için çeşitli yöntemler içerir. İhtiyacınız olanı, mutlak olana göreceli bir yolu dönüştürecek olan ToAbsolute().

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

Ancak, yine de Response.Redirect çağrılarında tilde kullanabilirsiniz, bu yüzden hala olurdu şu işe:

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

Sen Yanıtını kullanmadan önce mutlak bir yol URL'yi dönüştürmek gerekmez .Redirect.

+0

Sadece 'Response.Redirect (...)' denedim ve sanal klasörü hesaba katmadım. Ama hem de 'VirtualPathUtility' hem de 'Yönlendirme' çalışıyor. +1 kabul edildi. –