我需要检查.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类那样以更简单的方式完成呢?
发布于 2022-05-26 11:16:49
您可以使用Segments对象的属性( property HttpContext.Url )来代替您编写的试图对url进行分区的前两行。它为您提供了一个包含所有段的字符串数组。
但是,我想你的逻辑是错误的。为什么不直接在实际的Action中执行所需的操作呢?
我指的是你提到的比较Action(Controller Method)的urls,对吗?如果是这样的话,为什么不直接在其中执行您想要的操作呢?
例如,如果/api/employees/2d50f670c72911ec861760be36a6c36a/authorise请求必须在被请求的操作之前执行一个逻辑(并且这个逻辑是针对每个请求执行的),那么我们为什么要在一个middleware中这样做呢?
因为据我所知,middlewares被用于横切关注点。
https://stackoverflow.com/questions/72388314
复制相似问题