【问题标题】:Include placeholder in API base path .net core在 API 基本路径 .net 核心中包含占位符
【发布时间】: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 路由模式

标签: c# asp.net-web-api .net-core url-routing asp.net-web-api-routing


【解决方案1】:

看看属性路由herehere

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

[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

【讨论】:

  • 我也是这么想的,这是我最初的解决方案,使用正则表达式提取账户信息,希望有其他解决方案。谢谢,感谢帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多