2011-12-13 1 views
2

메소드 UrlHelper.GenerateUrl이() 나는 Html.BeginForm에 Url.Action에서 모든 것을()에 영향을주는 다른 구현을 필요 ASP.NET MVC 프레임 워크에서 UrlHelper.GenerateUrl()을 재정의 할 수 있습니까?

System.Web.Mvc.UrlHelper

에 있습니다().

이 현재 .NET 구현입니다 : 다른 클래스가 사용에서 나는 그것의 가능한 대리자를 사용하여 정적 메소드를 오버라이드 (override)하는 것을 알고

[SuppressMessage("Microsoft.Design", "CA1055:UriReturnValuesShouldNotBeStrings", Justification = "As the return value will used only for rendering, string return value is more appropriate.")] 
    public static string GenerateUrl(string routeName, string actionName, string controllerName, string protocol, string hostName, string fragment, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues) { 
     string url = GenerateUrl(routeName, actionName, controllerName, routeValues, routeCollection, requestContext, includeImplicitMvcValues); 

     if (url != null) { 
      if (!String.IsNullOrEmpty(fragment)) { 
       url = url + "#" + fragment; 
      } 

      if (!String.IsNullOrEmpty(protocol) || !String.IsNullOrEmpty(hostName)) { 
       Uri requestUrl = requestContext.HttpContext.Request.Url; 
       protocol = (!String.IsNullOrEmpty(protocol)) ? protocol : Uri.UriSchemeHttp; 
       hostName = (!String.IsNullOrEmpty(hostName)) ? hostName : requestUrl.Host; 

       string port = String.Empty; 
       string requestProtocol = requestUrl.Scheme; 

       if (String.Equals(protocol, requestProtocol, StringComparison.OrdinalIgnoreCase)) { 
        port = requestUrl.IsDefaultPort ? String.Empty : (":" + Convert.ToString(requestUrl.Port, CultureInfo.InvariantCulture)); 
       } 

       url = protocol + Uri.SchemeDelimiter + hostName + port + url; 
      } 
     } 

     return url; 
    } 

하지만이 방법을 모두 허용하지 않습니다 같은 방법으로 호출 내 구현 대신 기본 구현.

답변

3

당신이 원하는 것은 불가능합니다. URL 및 HTML 도우미의 출력을 수정하려면 사용자 정의 항목을 작성하거나 단순히 경로 정의를 변경할 수 있습니다. 도우미는 URL을 생성 할 때 해당 경로 정의를 사용합니다. 전체 애플리케이션에서 URL이 어떻게 보이는지에 대한 매우 구체적인 요구 사항이있는 경우 맞춤 경로를 작성할 수도 있습니다.

+0

그것은 광범위한 생각 후에 내 결론이었습니다. 새로운 라우팅 메커니즘. 좋은 예가 있습니다 : http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx – Korayem