【问题标题】:Best way to setup Routes in ASP.NET Core 2 Web Api在 ASP.NET Core 2 Web Api 中设置路由的最佳方法
【发布时间】:2017-10-05 14:57:13
【问题描述】:

我正在寻找在我的 Web Api 中进行路由的最佳方式。

目前我的路线是这样的:

[Route("api/branch/{branchId}/products")]
[Route("api/branch/{branchId}/clients")]

为了使用 api,我需要发送一个带有授权标头的令牌。该令牌将用户 branchId 作为声明。

使用我当前的设置,我需要将 branchId 提供给用户才能使用 api,但我不喜欢。

仅通过在此路由中使用令牌来实施解决方案的最佳方法是什么?

[Route("api/branch/products")]

我知道我可以使用 UserManager 提取每个控制器中的令牌值,但这将是很多重复代码

你有什么建议?

谢谢 阿尔贝托·洛佩兹

【问题讨论】:

  • 调用您的 API 的客户端应该能够提供 branchId。客户端应该能够构建此路由。您的问题是您以某种方式认为 branchId 是私人信息,并且由于您说它是私人信息,而不是您的路线不能成为 {branchId} 部分
  • 分支 ID 是否与被调用的操作相关?如果分支 id 用于识别客户端并且是授权标头的一部分(最终在用户声明中),那么 URL 中不需要它

标签: asp.net asp.net-web-api asp.net-core


【解决方案1】:

编写中间件从令牌中提取声明值并将其存储在当前的 http 上下文中。

HttpContext.Items["branchId"] = branchIdFromToken;

然后,您可以通过调用HttpContext.Items["branchId"] 来在请求上下文可用的任何地方使用它。

可以在here 找到编写中间件和从令牌中提取声明的示例(尽管用途不同)。

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多