Доступ к ActionExecutingContext с использованием вспомогательного класса - PullRequest
0 голосов
/ 01 августа 2010

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

    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).

1 Ответ

1 голос
/ 01 августа 2010

Нет, просто потому, что 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...