저는 거의 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가 아님).
팁 주셔서 감사합니다. :) 희망이 도움이됩니다. 행운을 빕니다!
global.asax에서 경로 정의를 게시 할 가능성이 있습니까? 분명히 뭔가가 경로에서 URL에서 잘못 번역되고 있습니다. – Dave
my global.asax에 MVC3 응용 프로그램 템플릿으로 생성 된 기본 경로가 포함되어 있습니다. –