C# 一个用于多站点的Asp.Net核心Api服务

C# 一个用于多站点的Asp.Net核心Api服务,c#,asp.net-core,.net-core,http-headers,httprequest,C#,Asp.net Core,.net Core,Http Headers,Httprequest,我只想为多个网站创建一个Asp.Net核心API服务。它们几乎相同,但内容不同 我想知道哪个网站调用API来返回该网站的内容 例如: 网站一(angular客户端): 网站二(客户端): API(/API/getservices)=>返回所有服务(取决于调用API的站点,方法返回不同的值) 如果Site One调用=>{“预览”,“评论”} 如果站点2调用=>{“软件”,“硬件”} 我应该如何处理这个问题?我可以从请求的标题中获取URL吗?还是别的什么?有很多方法可以处理它: 1-ClientT

我只想为多个网站创建一个Asp.Net核心API服务。它们几乎相同,但内容不同

我想知道哪个网站调用API来返回该网站的内容

例如:

网站一(angular客户端):

网站二(客户端):

API(/API/getservices)=>返回所有服务(取决于调用API的站点,方法返回不同的值)

如果Site One调用=>{“预览”,“评论”}

如果站点2调用=>{“软件”,“硬件”}


我应该如何处理这个问题?我可以从请求的标题中获取URL吗?还是别的什么?

有很多方法可以处理它:

1-ClientType:每个客户端都应该介绍自己,例如ClientB在所有请求中设置头键(例如:
ClientType:Client-B
),您可以确定您的客户端

2-源代码:您可以从请求头中读取
源代码
,并根据其域确定客户端,但我认为这不是一个好主意,因为域可能随时发生更改

3-Api密钥:您可以为每个客户端生成一个唯一的密钥(
Guid
是一个不错的选择),客户端应该在所有请求头中设置其Api密钥(例如
Api密钥:XXXXXXXX
),并在服务器端按密钥确定客户端


最后,我建议您在中间件中处理客户端,并将其与http功能一起传递给控制器。

请求头是个好主意,您可以在那里传递一些api密钥。所以后端可以根据其值创建请求。更不灵活的方法是阅读原始标题,其中会提到您的网站URL。谢谢,API键是一个好主意。我使用这个。但我不知道如何读取原始呼叫URL。你能给我一个提示吗?谢谢。我认为Api密钥是最好的方法,我会这样做。但现在我想知道如何从请求中读取origin?您可以通过当前HTTP请求头集合从API方法中获取它:
IEnumerable originValues;Request.Headers.TryGetValue(“Origin”,out originValue)