Я борюсь с этим последние несколько часов. Все, что я пытаюсь сделать, это выбрать параметры действия из текущего маршрута, как это. Этот метод находится внутри простого статического вспомогательного класса.
public static string GetStateName(ActionExecutingContext filterContext)
{
var stateParam = filterContext.ActionParameters.Where(p => p.Key == RouteConst.StateName).FirstOrDefault();
return !string.IsNullOrEmpty(stateParam.Key) ? stateParam.Value.ToType<string>() : string.Empty;
}
Однако мне не нравится идея передачи контекста каждый раз, когда мне приходится вызывать этот метод. Есть ли способ получить доступ к текущему контексту выполнения точно так же, как HttpContext.Current?
Обновление: используя предложение Necros, я в итоге сделал именно это.
общедоступный статический класс ActionExtensions {
public static string GetMarketName(this ActionExecutingContext filterContext)
{return GetActionParamValue(filterContext, RouteConst.MarketName).ToType<string>();}
public static string GetStateName(this ActionExecutingContext filterContext)
{return GetActionParamValue(filterContext, RouteConst.StateName).ToType<string>();}
private static string GetActionParamValue(ActionExecutingContext filterContext, string actionParamName)
{
var actionParam = filterContext.ActionParameters.Where(p => p.Key == actionParamName).FirstOrDefault();
return !string.IsNullOrEmpty(actionParam.Key) ? actionParam.Value.ToType<string>() : string.Empty;
}
ToType () - это еще один метод расширения, который внутренне использует Convert.ChangeType (значение, тип).