首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义ControllerContext

自定义ControllerContext
EN

Stack Overflow用户
提问于 2013-10-02 13:49:02
回答 1查看 1.5K关注 0票数 3

是否有一种方法可以创建一个自定义的ControllerContext来包装现有的ControllerContext?

我想要完成的是..。

为了进行日志记录,我们需要记录控制器名称、操作名称和页面名称。我们现在从ControllerContext对象中获取这些值。

为了获得日志类的值,我创建了一个静态类,这个类我不太感兴趣。

代码语言:javascript
复制
public static class ControllerContextHelper
{
    public static string GetControllerName(ControllerContext context)
    {
        string result = String.Empty;
        if (context.RouteData.Values.ContainsKey("controller"))
        {
            result = context.RouteData.Values["controller"].ToString();
        }
        return result;
    }

    public static string GetActionName(ControllerContext context)
    {
        string result = String.Empty;
        if (context.RouteData.Values.ContainsKey("action"))
        {
            result = context.RouteData.Values["action"].ToString();
        }
        return result;
    }

    public static string GetPageName(ControllerContext context)
    {
        string result = String.Empty;
        if (context.RouteData.Values.ContainsKey("page"))
        {
            result = context.RouteData.Values["page"].ToString();
        }
        return result;
    }
}

我更希望这个逻辑在ControllorContext对象中,这样我就不需要有一个"Helper“类来完成它了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-02 14:01:01

可以为此使用扩展方法。

代码语言:javascript
复制
public static class ControllerExtensions
{
    public static string GetControllerName(this ControllerContext context)
    {
        return GetRouteDataValue("controller", context);
    }

    public static string GetActionName(this ControllerContext context)
    {
        return GetRouteDataValue("action", context);
    }

    public static string GetPageName(this ControllerContext context)
    {
        return GetRouteDataValue("page", context);
    }

    private static string GetRouteDataValue(string key, ControllerContext context)
    {
        string value = String.Empty;
        if (context.RouteData.Values.ContainsKey(key))
        {
            value = context.RouteData.Values[key].ToString();
        }
        return value;
    }
}

在您的控制器或任何有控制器可用的地方,您都可以调用扩展方法。

代码语言:javascript
复制
public ActionResult Attempt()
{
    var actionName = ControllerContext.GetActionName();
    return View();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19138490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档