为收到的每个请求替换MvcNewtonsoftJsonOptions

问题描述 投票:2回答:1

是否有任何方法可以为每个请求替换MvcNewtonsoftJsonOptions?

我如何注册MvcNewtonsoftJsonOptions:

private static void AddJsonFormatterServices(IServiceCollection services) {
   services.TryAddEnumerable(ServiceDescriptor.Transient<IConfigureOptions<MvcNewtonsoftJsonOptions>, OurMvcJsonOptions>());            
}
// This needs to replaced somehow for every request.

OurMvcJsonOptions]中,我注册了JSonConverters。此服务读取所有json转换器,并将其添加到JSONSerializer设置转换器中。

问题:

这里的问题在于,转换器之一正在使用从每个请求的DI中解析的接口,并且由于它现在是全局作用域,它将从全局作用域中解析组件。现在,当收到请求时,它仍然使用全局上下文中的组件,该组件不包含所需的信息。

我已经尝试过IResourceFilter和IContractResolver。我认为问题类似于所提到的here,但我无法使用此处提到的解决方案来解决。

还有一个类似的问题here,但由于最新版本中的格式化程序已被删除,因此我的问题没有解决。

总结问题,MVC将MvcNewtonsoftJsonOptions注册为单例,而我需要为每个请求创建它,以便为请求中的值提供正确的JsonConverter。

是否可以针对每个请求替换MvcNewtonsoftJsonOptions?我如何注册MvcNewtonsoftJsonOptions:私有静态无效AddJsonFormatterServices(IServiceCollection services){...

c# asp.net-mvc json.net autofac asp.net-core-3.1
1个回答
0
投票

如果您具有通过依赖关系注入解决的类型,但是具有需要不同配置或DI注册范围的资源。最简单的方法是使用不同的实现和/或作用域对DI进行第二次注册。

© www.soinside.com 2019 - 2024. All rights reserved.