有没有办法创建自定义ControllerContext来将现有的ControllerContext包装在mvc中?
这就是我想要完成的事情......
出于记录目的,我们需要记录控制器名称,操作名称和页面名称。我们现在从ControllerContext对象中获取这些值。
我创建了一个静态类,我不是很兴奋,以获取日志记录类的值。
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”类来为我做这个。
答案 0 :(得分:3)
您可以使用
的扩展方法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;
}
}
在您的控制器或控制器可用的任何地方,您都可以调用扩展方法
public ActionResult Attempt()
{
var actionName = ControllerContext.GetActionName();
return View();
}