Я боролся с этим последние несколько часов.Все, что я пытаюсь сделать, это выбрать параметры действия из текущего маршрута, как это.Этот метод находится внутри простого статического вспомогательного класса.
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, я так и сделал.
publicстатический класс 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 (value, type).