在 API 基本路径 .net 核心中包含占位符

Posted

技术标签:

【中文标题】在 API 基本路径 .net 核心中包含占位符【英文标题】:Include placeholder in API base path .net core 【发布时间】:2021-04-03 04:42:27 【问题描述】:

想知道如何在 API 基本路径中包含占位符/变量,您会看到在 azure devops 中使用的类似内容,例如:https://dev.azure.com/company-name/。 您将如何设置您的 API 以获取基本路径开头的上下文。

我想要实现的是让我的 API 具有执行 API 调用的帐户的上下文,而不必成为 API 请求正文的一部分。我的 API 格式为https://some-company.com/account/_apis/some-api/controller/

【问题讨论】:

你不能用模式更新模式吗?接收帐户作为 api 端点的一部分? docs.microsoft.com/en-us/aspnet/core/mvc/controllers/… 传统上是的,但我们正在转向 kubernetes 中的 API-Gateway 路由,并决定转向微软的 API 约定,因此 API 仅开始从其自己的基本路径获取路由的上下文,即“ some-api”,这超出了 API 路由模式 【参考方案1】:

看看属性路由here和here:

它很灵活,因此您可以使用“属性”制定路线并将其分配到控制器/动作之上。

[Route("customers/customerId/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId)  ... 

【讨论】:

我完全同意你的看法,这是传统的约定,我用它来实现正常的宁静约定。在我的例子中,它不起作用,因为 API 基本路径从哪里开始:https://some-company.com/account/_apis/**api-base-path**/controller/route 并且帐户信息会在那之前【参考方案2】:

你不能按照建议的方式去做,路由参数只适用于你的控制器的路由。

但您可以尝试从当前上下文中提取信息:

HttpContext.Current.Request.Url.AbsoluteUri

【讨论】:

我也是这么想的,这是我最初的解决方案,使用正则表达式提取账户信息,希望有其他解决方案。谢谢,感谢帮助

以上是关于在 API 基本路径 .net 核心中包含占位符的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.net 核心(API 控制器)处理基本控制器中的异常

完整修改删除,防止数据库字符串攻击

字符串攻击防攻击实体类数据访问类--11月29日

防止SQL注入攻击,数据库操作类

如何使用正则表达式匹配从 xml 文件中搜索和替换包含占位符标记的文本。 VB.net 或 C#

Asp.net core 3.1 保护 API 和 Web 应用程序