2012-03-05 2 views
5

저는 거의 StackOverflow에 익숙하지 않으므로 제 무지의 징조를 용서하십시오. :)ASP.NET MVC C# 클래스의 컨트롤러 및 작업 이름 얻기

Visual Studio 2010 (C#으로 작성된 컨트롤러)의 MVC 응용 프로그램에 다소 사소한 문제가 있습니다. 응용 프로그램 작업 내역을 생성하는 메서드를 만들고 그 목적을 위해 매번 사용되는 컨트롤러 및 작업의 이름을 가져 오려고합니다. 불행히도 내 컨트롤러 이름을 가진 문자열의 첫 글자는 항상 빠져 있습니다.

string url = HttpContext.Current.Request.RawUrl; 
    RouteData route = RouteTable.Routes.GetRouteData(new OwnedContext(url)); 
    var values = route.Values; 
    string controllerName = values["controller"].ToString(); 
    string actionName = values["action"].ToString(); 

OwnedContext는 다음과 같이 정의된다 : 이 코드에 사용되는 작업 이름이 올바르게 저장

private class OwnedContext : HttpContextBase 
    { 
     private readonly HttpRequestBase mockHttpRequestBase; 

     public OwnedContext(string appRelativeUrl) 
     { 
      this.mockHttpRequestBase = new OwnedRequest(appRelativeUrl); 
     } 

     public override HttpRequestBase Request 
     { 
      get { return mockHttpRequestBase; } 
     } 
    } 

을하지만 난이 코드를 디버깅 할 때 나는 컨트롤러 명 문자열의 이름을 보관 유지하는 것을 볼 수 컨트롤러가 있지만 첫 번째 (자본) 문자는 URL 문자열에이 패턴 (예 :/controller/action)이있는 값이 있어도 항상 누락됩니다.

나는 포인터, 코드 예제 또는 설명의 이유를 이해할 것입니다. 내 설명이 정확하지 않으면 알려 주시면 개선 할 것입니다. FOUND 해결 방법 : 사전 :

편집에

덕분에

문제를 (일종의) 찾았 OwnedContext에 문제 (내 원래의 질문에 정의)이 있었다.

HttpContext를 사용자 정의 게터가
string url = HttpContext.Current.Request.RawUrl; 
    RouteData route = RouteTable.Routes.GetRouteData(httpContext); 
    UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContext, route)); 

    var routeValueDictionary = urlHelper.RequestContext.RouteData.Values; 
    string controllerName = routeValueDictionary["controller"].ToString(); 
    string actionName = routeValueDictionary["action"].ToString(); 

:

public new HttpContextBase httpContext 
    { 
     get 
     { 
      HttpContextWrapper context = 
       new HttpContextWrapper(System.Web.HttpContext.Current); 
      return (HttpContextBase)context; 
     } 
    } 

나는 OwnedContext을 생략이 방법을하고 HarHaHu 제안하지만, 원래 문제가 지속으로 내가 GetRouteData의 매개 변수로 HttpContext를 배치 할 때까지 처음에 나는, routeValueDictionary 사용 마침내 내 컨트롤러의 정식 명칭을 얻었습니다 (예 : 가구 및 urniture가 아님).

팁 주셔서 감사합니다. :) 희망이 도움이됩니다. 행운을 빕니다!

+0

global.asax에서 경로 정의를 게시 할 가능성이 있습니까? 분명히 뭔가가 경로에서 URL에서 잘못 번역되고 있습니다. – Dave

+0

my global.asax에 MVC3 응용 프로그램 템플릿으로 생성 된 기본 경로가 포함되어 있습니다. –

답변

4
var routeValueDictionary = urlHelper.RequestContext.RouteData.Values; 

사용자 정의 컨텍스트와 함께 사용하십시오.