我需要检查。net核心中间件中的路由,并根据不同的路由执行不同的操作。为此,我必须对以下从HttpContext.Request.Path
返回的示例路由进行路由比较:
/api/employees/2d50f670c72911ec861760be36a6c36a/authorise
/api/employees/9d50f670c72911ec861760be36a6c36a/decline
由于路径中存在动态ID,我必须使用下面的代码拆分和连接字符串:
route = "/api/employees";
var pathSegments = request.Path.Value.Split('/');
if (pathSegments.Length > 3 && Guid.TryParse(pathSegments[3], out Guid employeeId))
{
route += @"/{employeeId}/"+string.Join("/", pathSegments.Skip(4));
}
虽然这对URL比较有效,但我想知道这是否可以像WCF中提供的UriTemplate
类那样以更简单的方式完成?
您可以使用HttpContext.Url
对象的Segments
属性,而不是您尝试分区url的前两行。它给你一个包含所有片段的字符串数组。
但是,我猜你在执行一个错误的逻辑。为什么不在实际的Action
中执行所需的操作呢?
我的意思是你提到的网址比较,肯定调用Action
(Controller Method
),对吗?如果是这样,为什么不直接在里面执行你想要的动作呢?
例如,如果/api/employees/2d50f670c72911ec861760be36a6c36a/authorise
请求必须在请求的操作之前执行逻辑(并且每个请求都执行此逻辑),为什么我们要在middleware
中执行此逻辑?
因为据我所知,middlewares
用于横切关注点。