asp.net - ASP.Net Web API - 在公共位置提取标头
问题描述
我正在开发 SaaS 应用程序,我将 ASP.Net Web API 实现为服务层。在我的 Web API 中,当生成任何请求时,它将具有一个标头值“x-companyid”,该值是公司特定的,并标识请求来自哪个公司(租户)。
我在 Web API 项目中的所有 ApiControllers 中都需要该 companyID。当然,我可以使用“Request.Headers.GetValues("x-companyid") 在每个 ApiController 中获取标头值,但它会在所有 ApiControllers 中重复。
我试图创建“BaseApiController”并从“BaseApiController”继承我的所有 ApiController,但它不允许我覆盖 ActionExecuting,以便我可以在公共位置提取标题。
谁能建议我如何在我的项目中通常提取“x-companyid”标头,这样我就不必在所有 ApiController 中重复代码?
解决方案
你最好的朋友是动作过滤器。因为他们拦截特定控制器的每个 api 调用。
您所要做的就是用您制作的东西来装饰控制器名称
[Tenant]
public foo MyController()
{}
这种方法使您可以控制您希望添加此提取的控制器,因为您可能需要一些查找 api 和不需要特定租户的东西
这是一个非常有用的链接:
https://www.c-sharpcorner.com/article/filters-in-Asp-Net-mvc-5-0-part-twelve/
更新
因为每个实例只有一个公司,我建议为当前租户添加一个单例,你无论如何都可以访问它
推荐阅读
- python - 根据连续多个其他字段中的条件更改某些字段的值
- c++ - 架构 x84_64 的未定义符号
- c - 我的父设备是什么,如何获得指向它的指针?
- javascript - JavaScript 函数检测会话期间设置的 cookie,但在新会话开始时检测不到预先存在的 cookie
- gitlab - 如何恢复 gitlab 片段?
- java - 使用 JAXB 解组多次出现的 XML 元素
- mysql - 将 MySQL 数据复制到 ClickHouse
- python - find_element_by_xpath 无法定位
- c# - 如何制作一组强类型的字符串值?
- express - 何时在中间件中使用 () 以及何时使用仅引用