Я довольно новичок в StackOverflow, поэтому, пожалуйста, прости любые признаки моего невежества.:)
У меня есть небольшая проблема с приложением MVC в Visual Studio 2010 (контроллеры написаны на C #).Я хочу создать метод, который генерирует историю действий приложения, и для этой цели я хочу получить имя контроллера и действие, которые используются каждый раз.К сожалению, первая буква строки, которая содержит имя моего контроллера, всегда отсутствует.Я использовал этот код:
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; }
}
}
Имя действия сохраняется правильно, но когда я отлаживаю этот код, я вижу, что строка controllerName содержит строкуимя контроллера, но первая (заглавная) буква всегда отсутствует, хотя строка URL содержит значение с этим шаблоном: / controller / action.
Буду признателен за любые указатели, примеры кода или объяснение, почему это происходит.Если мое описание не является точным, дайте мне знать, я его исправлю.
Заранее спасибо:)
РЕДАКТИРОВАТЬ: НАШЛО РЕШЕНИЕ:
Найдена проблема (вроде): Что-то не так с OwnedContext (определено в моем исходном вопросе).Сначала я использовал routeValueDictionary, как предложил HarHaHu, но исходная проблема сохранялась, пока я не поместил httpContext в качестве параметра GetRouteData:
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();
Где httpContext имеет собственный метод получения:
public new HttpContextBase httpContext
{
get
{
HttpContextWrapper context =
new HttpContextWrapper(System.Web.HttpContext.Current);
return (HttpContextBase)context;
}
}
Таким образом, япропустил OwnedContext и, наконец, получил полное имя моего контроллера (например: Мебель, а не предметы интерьера).
Спасибо за подсказки.:) Надеюсь, это кому-то поможет.Удачи!