将相对路径中的ID部分替换为模板字符串



我需要检查。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用于横切关注点。

最新更新