开发者

Accessing the ActionExecutingContext using a helper class

I have been struggling with this for the past few hours. All I'm trying to do is pick action parameters from the current route like this. This method resides inside a simple static helper class.

    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;
    }

However, I do not like the idea of passing in the context every time I have to call this method. Is there a way to access the current executing context just like HttpContext.Current?

Update: Using Necros' suggestion, this is what I ended up doing.

public static class ActionExtensions {

    public static string GetMarketName(this ActionExecutingContext filterContext)
    {return GetActionParamValue(filterContext, RouteConst.MarketName).ToType<string>();}

    public static string GetStateName(this ActionExecutingContext filterContext)
    {retur开发者_StackOverflow社区n 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() is another extension method which internally uses Convert.ChangeType(value, type).


No, simply because ActionExecutingContext is only valid during OnActionExecuting event (or whatever it's called where it originates from). All you can do is make it look nice by making it an extension method.

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;
}

and call it like this

var stateName = filterContext.GetStateName();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜