Доступ к ActionExecutingContext с помощью вспомогательного класса

Я борюсь с этим последние несколько часов. Все, что я пытаюсь сделать, это выбрать параметры действия из текущего маршрута, как это. Этот метод находится внутри простого статического вспомогательного класса.

    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 (значение, тип).


person Praveen    schedule 31.07.2010    source источник


Ответы (1)


Нет, просто потому, что ActionExecutingContext действителен только во время OnActionExecuting события (или как там оно называется, откуда оно исходит). Все, что вы можете сделать, это сделать его красивым, сделав его методом расширения.

public static string GetStateName(this ActionExecutingContext filterContext)
{
    var stateParam = filterContext.ActionParameters.Where(p => p.Key == RouteConst.StateName).FirstOrDefault();
    return !string.IsNullOrEmpty(stateParam.Key) ? stateParam.Value.ToType<string>() : string.Empty;
}

и назовите это так

var stateName = filterContext.GetStateName();
person Necros    schedule 31.07.2010