首页 > 解决方案 > 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 中重复代码?

标签: asp.netasp.net-web-apiasp.net-web-api2

解决方案


你最好的朋友是动作过滤器。因为他们拦截特定控制器的每个 api 调用。

您所要做的就是用您制作的东西来装饰控制器名称

[Tenant]
public foo MyController()
{}

这种方法使您可以控制您希望添加此提取的控制器,因为您可能需要一些查找 api 和不需要特定租户的东西

这是一个非常有用的链接:

https://www.c-sharpcorner.com/article/filters-in-Asp-Net-mvc-5-0-part-twelve/

更新

因为每个实例只有一个公司,我建议为当前租户添加一个单例,你无论如何都可以访问它

https://en.wikipedia.org/wiki/Singleton_pattern


推荐阅读