我们有一个 Web API (.NET Core 5),它将请求传递到另一个远程 Web API。
Web API 从传入请求中获取一些 cookie,并将它们附加到传出请求中。
通常情况下,这工作正常,我们会看到请求 cookie 到达远程 Web API。
但是,当同时发送多个请求时,一个传入请求的 cookie 会以某种方式泄漏到另一个请求的传出请求中。
当使用完全独立的用户和完全独立的浏览器时,甚至会发生这种情况。
我尝试过并确认过的事情:
将 cookie 从传入请求复制到传出请求的代码工作得很好。事实上,即使远程 API 上出现的 cookie 被“泄露”,我的自定义日志记录表明它仍然按预期工作
我可以在远程 Web API 上(在其原始 IIS 日志中)看到预期/泄漏的请求 cookie,因此不可能是远程 API 将其添加到其管道中的请求中。
添加了对 HttpClient 调用的日志记录,但看不到正在发送的意外 cookie。
这在本地不会发生
我的感觉是 HttpClient 中发生了一些事情?
更新 1我添加了日志记录CopyCookieHandler,它只创建一次并被所有请求重用
更新2我刚刚读到HttpMessageHandler实例导致CookieContainer对象被共享...这可能可以解释这一点... https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore -5.0#cookies

第一个 API 具有使用 HttpClient 的设置:
services.AddHttpContextAccessor()
services.AddHttpClient<IRemoteService, RemoteService>()
.AddHttpMessageHandler<CopyCookieHandler>();
services.AddTransient<CopyCookieHandler>();
Run Code Online (Sandbox Code Playgroud)
在哪里
public class RemoteService : IRemoteService
{
private HttpClient …Run Code Online (Sandbox Code Playgroud) 我正在使用由Ewout Kramer创建的HL7.Fhir nuget package 0.9.3.
我正在使用ASP.NET Web API,但不幸的是,内置的JSON序列化不能正确生成JSON.它包含很多这样的:
"<IdentifierElement>k__BackingField"
Run Code Online (Sandbox Code Playgroud)
正如框架所示,此代码有效......
public HttpResponseMessage GetConformance()
{
var conformance = new Conformance();
var json = FhirSerializer.SerializeResourceToJson(conformance);
return new HttpResponseMessage{Content = new StringContent(json)};
}
Run Code Online (Sandbox Code Playgroud)
但这将变得非常重复,并且不遵循Web API的"按惯例"json/xml序列化方法.
是否有其他FHIR对象包可用,或者我应该自己编写?
我们有一个程序在几个图上执行图形分析(即最大流量问题).还有机会并行处理这些问题.
已有一个庞大的C#代码库,但我们打算重写其中很大一部分.在F#中进行这种类型的操作会更好吗,而不是说C#?
谢谢,皮特
*我有一个使用 IOC 容器的应用程序(Autofac,但可以是任何)。
我也有外部开发的模块。每个模块都需要指定自己的 DI 容器设置,定义特定于其模块的存储库、服务。
在部署时,这些模块然后通过 XML 配置手动注册到 Autofac。
通常,如果每个模块想要从 IOC 容器请求类型的实例,我们可以使用 ServiceLocator 模式。这将每个模块与特定的 IOC 容器类型分离,例如 Autofac/Unity/StructureMap/等。
但是我想在注册时将每个模块与 IOC 容器解耦。例如在做 container.Register().As(); 时
所有的 IOC 容器都有不同的方法来实现几乎相同的事情,所以我想知道是否有标准模式。
更新:我正在专门寻找一种方法来不可知类型的注册而不是类型实例的解析。