中间件中的路由控制器和动作

Posted

技术标签:

【中文标题】中间件中的路由控制器和动作【英文标题】:Route controller and action in middleware 【发布时间】:2017-01-13 03:11:50 【问题描述】:

我正在尝试检索控制器和操作,我已经尝试使用

var routeData = context.GetRouteData();

在中间件的 Invoke 方法中,但每次都产生 null。

有没有可能在中间件中检索路由数据?

我想要实现的是检查请求的操作是否具有 [RequireToken] 属性,如果是,它将检查传入标头中是否有特定令牌。

【问题讨论】:

不可以在中间件中获取路由数据。但是,您可以执行以下操作:-if (httpContext.Request.Path.ToString() == "/USA/Washington") 以查找控制器是否为美国且操作为华盛顿。 【参考方案1】:

动作/控制器上下文非常特定于中间件管道的 MVC 部分。无法在 MVC 管道本身之外检索路由数据。

为了实现所需的行为,您应该考虑实现一个 ActionFilter:https://docs.asp.net/en/latest/mvc/controllers/filters.html

【讨论】:

这正是我想要的!我设法通过使用 ActionFilter 来操纵动作结果,这解决了我的问题。

以上是关于中间件中的路由控制器和动作的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC教程五:ASP.NET MVC中的路由

Laravel 路由到控制器动作

Web API系列教程2.2 — ASP.NET Web API中的路由和动作选择机制

Rails - 在控制器中路由动作的正确方法

Laravel系列3.4中间件在路由与控制器中的应用

默认路由(控制器/动作)和 css/js 的链接不起作用 cakephp