rest - 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 文档;每个方法都会出现,有和没有租户路径
解决方案
如果你想透明地改变请求的传入路径,你可以添加一个中间件来设置Path
一个新的值,例如:
app.Use(async (context,next) =>
{
var newPath = // Logic to determine new path
// Rewrite and continue processing
context.Request.Path = newPath;
await next();
});
这应该在您可以确定租户之后和路由发生之前放置在管道中。
推荐阅读
- api - 如何在 golang 中调试特定的 api?
- reactjs - React router redirect based on api response
- git - Dealing with merge conflicts in Git Work Flow
- c# - 获取最新的子记录 - EF Core
- python - 字典返回空值;但它仍然存储在列表中
- jquery - Why is "content not found" when loading magnific popup on page load?
- ruby - 对 rb-inotify 的更新是否只是破坏了 Ruby 1.x 上的指南针?
- asp.net - Google Compute Engine auto scaling aspnet
- c - The C programming language Second Edition practice 1-9
- c - Format specifies type 'char *' but the argument has type 'int', any mistake I made here?