2010-12-07 6 views
1

런타임시 ASP.NET MVC 응용 프로그램에서 URL을 생성 중입니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?런타임시 IIS ApplicationName ASP.net

url = string.Format("/controller/action/{0}/{1}/{2}/{3}/{4}", request.Id, 
              builds.Release, builds.Localization.Value, builds.Label, SessionId); 

URL은 궁극적으로 AJAX 콜백을 컨트롤러 동작으로 되돌리기 위해 사용됩니다. 문제는 내 배포 환경에서이 응용 프로그램이 루트가 아니므로 URL이 유효하지 않다는 것입니다.

{host} \ url < - 이것은 내가 가지고있는 것입니다. {host} {applicationname} \ url < - 이것이 내가 필요한 것입니다.

그래서 런타임에 응용 프로그램 이름을 확인하고 URL을 생성하는 데 사용하려고했습니다. applicationname을 어떻게 얻을 수 있습니까? 이것이 최선의 방법입니까?

감사합니다.

답변

1

URL의 파탄 부분으로 Request.ApplicationPath를 포함해야합니다.

url = string.Format("{0}controller/action/{1}/{2}/{3}/{4}/{5}", Request.ApplicationPath, request.Id, 
              builds.Release, builds.Localization.Value, builds.Label, SessionId); 

VirtualPathUtility 클래스를 살펴볼 수도 있습니다. (id, release, localization, labelsessionId 토큰 복용)이 분명히 올바른 경로가 설정되어 있음을 의미한다

Url.Action("SomeAction", "SomeController", new { 
    id = request.Id, 
    release = builds.Release, 
    localization = builds.Localization.Value, 
    label = builds.Label, 
    sessionId = SessionId 
}); 

: 특히

VirtualPathUtility.ToAbsolute() 
2

가장 좋은 방법은 URL helper Action 방법을 사용하는 것입니다

routes.MapRoute(
    "MyRoute", 
    "{controller}/{action}/{id}/{release}/{localization}/{label}/{sessionId}", 
    new { controller = "SomeController", action = "SomeAction" } 
); 

비고 : 문자열 연결 및/또는 st url 인코딩과 관련하여 문제가 발생하지 않도록하려는 경우 URL을 처리 할 때 형식을 지정하십시오.

설명 2 : UrlHelper의 인스턴스는 컨트롤러의 Url 속성으로 각 컨트롤러 동작에서 사용할 수 있습니다. 각보기 및 각 도우미에 표시됩니다.