在过滤器属性中获取区域,控制器和动作名称

学习...

我具有全局属性,需要在其中知道区域,控制器和操作。由于路由(内部区域注册和属性路由),我无法使用RawUrl。我遵循以下两种方法,但是在两种情况下,我的区域都返回为空。当我使用路线时,我会得到区域名称。当我执行redirecttoaction或url.action或手动键入url等时,为什么我的区域为null?我们正在使用MVC 5.0。

1:

var routingValues = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current)).Values;

                        var currentArea = (string) routingValues["area"] ?? string.Empty;
                        var currentController = (string) routingValues["controller"] ?? string.Empty;
                        var currentAction = (string) routingValues["action"] ?? string.Empty;

2:

var handler = HttpContext.Current.Handler as System.Web.Mvc.MvcHandler;
                            var area = handler.RequestContext.RouteData.Values["area"];
                            var controller = handler.RequestContext.RouteData.Values["controller"];
                            var action = handler.RequestContext.RouteData.Values["action"];

就像我上面说的,如果我使用路线(/ TipHotLine),那么我得到的区域名称就很好。

public class AgencyAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Agency";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Agency_default",
                "Agency/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );

            context.MapRoute(
                "tiphotline",
                "tiphotline",
                new
                {
                    controller = "tiphotline",
                    action = "Index",
                    Area = "Agency"
                }
            );


        }
    }
丹尼尔·JG

注册区域后,使用的MapRoute方法将dataContextToken添加到每个路由。您可以在此处检查源代码,您将看到类似以下的方法,并且您会注意到一行添加了数据令牌:

public Route MapRoute(string name, string url, object defaults, object constraints, string[] namespaces)
{
    ...   
    route.DataTokens[RouteDataTokenKeys.Area] = AreaName;
    ...
    return route;
}

因此,在您的过滤器中,您只需要使用key"area"而不是route值来获取数据令牌例如,以下过滤器将在路由中找到的区域,控制器和动作中添加标题

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var routingValues = filterContext.RouteData.Values;
    var currentArea = filterContext.RouteData.DataTokens["area"] ?? string.Empty;
    var currentController = (string)routingValues["controller"] ?? string.Empty;
    var currentAction = (string)routingValues["action"] ?? string.Empty;

    filterContext.HttpContext.Response.AddHeader("Routing info", string.Format("controller={0},action={1},area={2}", currentController, currentAction, currentArea));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在过滤器中获取AngularJS控制器

来自分类Dev

AngularJS中的控制器和过滤器模块

来自分类Dev

Laravel-在过滤器中获取路线名称

来自分类Dev

控制器测试和过滤器/动作的存根。有什么指导方针?

来自分类Dev

在Laravel 4中获取控制器和动作名称

来自分类Dev

在过滤器之前设置了实例变量的Rails测试控制器方法

来自分类Dev

如何开发特定于动作过滤器的控制器或动作方法

来自分类Dev

控制器上的同类型动作过滤器及其动作方法

来自分类Dev

控制器上的同类型动作过滤器及其动作方法

来自分类Dev

如何跨动作过滤器和控制器传递工作单元/实体上下文

来自分类Dev

AngularJS,如何从控制器内部获取并设置ng-repeat中定义的过滤器?

来自分类Dev

在AngularJS控制器中应用过滤器

来自分类Dev

如何在 Laravel API 上的控制器中应用跳过和限制过滤器

来自分类Dev

将来自控制器的动作用作导轨中另一个控制器中的过滤器

来自分类Dev

将来自控制器的动作用作导轨中另一个控制器中的过滤器

来自分类Dev

AngularJS-视图控制器和过滤器控制器

来自分类Dev

如何为所有控制器编写动作过滤器

来自分类Dev

Rails过滤器挂钩,用于在控制器动作运行之后但呈现视图之前

来自分类Dev

angularjs-如何根据其属性之一的值在控制器中获取ng-repeat过滤器中某项的索引?

来自分类Dev

如何在中间件Laravel中获取请求的控制器和动作的名称

来自分类Dev

在C#中获取所有控制器和动作名称

来自分类Dev

放置在过滤器中的vaadin访问会话属性

来自分类Dev

如何在过滤器中获取请求

来自分类Dev

我如何在过滤器中获取请求

来自分类Dev

获取动作局部变量的名称和值OnException自定义过滤器

来自分类Dev

在Yii中获取当前的控制器和动作ID

来自分类Dev

控制器性能比较中的自定义过滤器与过滤器功能

来自分类Dev

基于控制器属性的Rails过滤器产品列表

来自分类Dev

如何从过滤器或控制器为WebViewPage属性分配值?

Related 相关文章

  1. 1

    如何在过滤器中获取AngularJS控制器

  2. 2

    AngularJS中的控制器和过滤器模块

  3. 3

    Laravel-在过滤器中获取路线名称

  4. 4

    控制器测试和过滤器/动作的存根。有什么指导方针?

  5. 5

    在Laravel 4中获取控制器和动作名称

  6. 6

    在过滤器之前设置了实例变量的Rails测试控制器方法

  7. 7

    如何开发特定于动作过滤器的控制器或动作方法

  8. 8

    控制器上的同类型动作过滤器及其动作方法

  9. 9

    控制器上的同类型动作过滤器及其动作方法

  10. 10

    如何跨动作过滤器和控制器传递工作单元/实体上下文

  11. 11

    AngularJS,如何从控制器内部获取并设置ng-repeat中定义的过滤器?

  12. 12

    在AngularJS控制器中应用过滤器

  13. 13

    如何在 Laravel API 上的控制器中应用跳过和限制过滤器

  14. 14

    将来自控制器的动作用作导轨中另一个控制器中的过滤器

  15. 15

    将来自控制器的动作用作导轨中另一个控制器中的过滤器

  16. 16

    AngularJS-视图控制器和过滤器控制器

  17. 17

    如何为所有控制器编写动作过滤器

  18. 18

    Rails过滤器挂钩,用于在控制器动作运行之后但呈现视图之前

  19. 19

    angularjs-如何根据其属性之一的值在控制器中获取ng-repeat过滤器中某项的索引?

  20. 20

    如何在中间件Laravel中获取请求的控制器和动作的名称

  21. 21

    在C#中获取所有控制器和动作名称

  22. 22

    放置在过滤器中的vaadin访问会话属性

  23. 23

    如何在过滤器中获取请求

  24. 24

    我如何在过滤器中获取请求

  25. 25

    获取动作局部变量的名称和值OnException自定义过滤器

  26. 26

    在Yii中获取当前的控制器和动作ID

  27. 27

    控制器性能比较中的自定义过滤器与过滤器功能

  28. 28

    基于控制器属性的Rails过滤器产品列表

  29. 29

    如何从过滤器或控制器为WebViewPage属性分配值?

热门标签

归档