【发布时间】:2022-06-13 15:32:45
【问题描述】:
我有一个使用 .net core 6 的 Web 应用项目,我正在尝试从我构建的另一个 API 中获取一些 JSON 数据。在该 API 中,我返回的 JSON 包含一些转换为字符串的枚举。然后在我的网络应用程序项目中,ReadFromJsonAsync 方法会抛出异常,因为它无法将这些字符串转换回枚举或其他东西,所以我可以通过为ReadFromJsonAsync 方法设置 JSON 选项来修复它,如下所示:
public class AuthService : IAuthService
{
private readonly HttpClient _client;
public AuthService(HttpClient client)
{
_client = client;
}
public async Task<ApiResult<LoginResponse>?> Login(LoginCommand command)
{
var result = await _client.PostAsJsonAsync("api/auth/login", command);
var options = new JsonSerializerOptions
{
Converters = {new JsonStringEnumConverter()},
PropertyNameCaseInsensitive = true
};
var content = await result.Content.ReadFromJsonAsync<ApiResult<LoginResponse>>(options);
return content;
}
}
这可行,但问题是我将在不同的类中大量使用此方法,我不能每次都编写这些选项,所以我想全局应用这些选项。
我尝试在我的 Program.cs 课程中这样做,但它根本不起作用:
builder.Services.AddRazorPages().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
如何在全局范围内应用这些选项?这样我就不必每次都通过这些选项?
【问题讨论】:
-
您可以将
IOptions<JsonOptions>注入到控制器或操作方法中(然后使用options.Value.JsonSerializerOptions)。除了基本的HttpClient之外,您在此处配置的选项和依赖注入都已脱离循环。如果有一些运动可以改善这一点,那就太好了。 -
@DiplomacyNotWar 抱歉,我不明白你所说的外循环是什么意思?什么是循环之外的,应该改进什么?对不起,我的英语不是很好,我可能误解了你的意思。我应该如何在我的
Program.cs类中注入IOptions<JsonOptions>?我将它添加到我的类的构造函数中,但我不知道如何在我的Program.cs中注册该依赖项 -
如果有一种方法可以全局应用这些选项,并且不必将任何
options参数传递给ReadFromJsonAsync方法,那将是理想的。 idk 如果可能的话。 -
我的意思是
ReadFromJsonAsync是HttpContent的扩展方法。因此,没有依赖注入。
标签: c# asp.net-core asp.net-web-api razor razor-pages