2011-03-22 8 views
5

일반적인 .ashx 처리기 내에서 파일에 대한 가상 경로를 브라우저에 적합한 경로로 해석 할 수 있습니까?ASP.NET : 제네릭 처리기에서 파일의 가상 경로를 가져 오는 방법은 무엇입니까?

~/asp/ClockState.aspx 

ResolveUrl

/NextAllowed/asp/ClockState.aspx 

에 내가 WebForm의 Page라면, 내가 호출 할 수 있습니다 : 난 변환 할

/NextAllowed/asp/ClockState.aspx 
:로 확인

Page.ResolveUrl("~/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; } } 
} 

답변

7

당신은이 작업을 수행 할 VirtualPathUtility 클래스를 사용할 수 있습니다. 여기에는 경로로 작업하기위한 다양한 방법이 포함되어 있습니다. 필요한 것은 상대 경로를 절대 경로로 변환하는 ToAbsolute()입니다.

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

그러나 어쨌든 Response.Redirect를 호출의 물결을 사용할 수 있습니다, 그래서 여전히 것이다 다음은 작동 :

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

당신은 응답을 사용하기 전에 절대 경로로 URL을 변환 할 필요가 없습니다 . 리디렉션.

+0

나는 간단히'Response.Redirect (...)'시도를했는데 가상 폴더를 고려하지 않았다고 생각했다. 그러나 VirtualPathUtility와 그냥 Redirect가 작동합니다. +1이 수락되었습니다. –