首页 > 解决方案 > ASP.NET Core 5 路由重定向

问题描述

我们有一个 ASP.NET Core 5 Rest API,我们使用了一个非常简单的路由:

[Route("api/[controller]")]

后端是多租户的,但租户选择已由用户凭据处理。

现在我们希望将租户添加到路径中:

[Route("api/{tenant}/{subtenant}/[controller]")]

这使得 Excel / PowerQuery 等工具的跨租户查询更简单,不幸的是,这些工具倾向于为每个 url 存储凭据

问题是将所有现有呼叫重定向到旧路由,重定向到新路由。我们可以假设缺少的部分在凭据中可用(用户 ID 位于表单“租户/子租户/用户名”上)

我曾希望简单地拦截路由解析并填写租户/子租户路由值,但到目前为止还没有运气。

到目前为止,关闭的事情是有两个 Route-attributes,但不幸的是,这弄乱了我们的 Swagger 文档;每个方法都会出现,有和没有租户路径

标签: restasp.net-core

解决方案


如果你想透明地改变请求的传入路径,你可以添加一个中间件来设置Path一个新的值,例如:

app.Use(async (context,next) =>
{
    var newPath = // Logic to determine new path

    // Rewrite and continue processing
    context.Request.Path = newPath;

    await next();
});

这应该在您可以确定租户之后和路由发生之前放置在管道中。


推荐阅读