gpt4 book ai didi

c# - FluentValidation 未使用 Web API 中的文化

转载 作者:行者123 更新时间:2023-11-30 16:57:55 24 4
gpt4 key购买 nike

我有一个 Web API,在 global.asax 中我将文化设置如下:

protected void Application_PostAuthenticateRequest()
{
var culture = CultureInfo.CreateSpecificCulture("nl-BE");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}

我已经为 .NET nuget 添加了 Fluent Validation,因此在 bin 文件夹中我有/nl/FluentValidation.resources.dll。

接下来,我有一个像这样的验证器:

public class AddWeightCommandValidator : AbstractValidator<AddWeightCommand>
{
public AddWeightCommandValidator()
{
RuleFor(command => command.PatientId).GreaterThan(0);
RuleFor(command => command.WeightValue).InclusiveBetween(20, 200);
}
}

这是从我的命令中调用的,例如:

new AddWeightCommandValidator().ValidateAndThrow(request);

问题是验证消息仍然是英语而不是荷兰语。

如果我调试,就在调用验证器之前,文化已正确设置在 CurrentUICulture 和 CurrentCulture 上。

有人知道我做错了什么吗?

最佳答案

感谢 Stijn 的提示,我开始研究如何使用自己的资源进行 Fluent Validation,我就是这样做的。

在 global.asax 中,设置了文化,并根据该文化设置了 Fluent Validation 的资源提供者类型:

protected void Application_PostAuthenticateRequest()
{
// Set culture
var culture = CultureInfo.CreateSpecificCulture("nl-BE");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

// Set Fluent Validation resource based on culture
switch (Thread.CurrentThread.CurrentUICulture.ToString())
{
case "nl-BE":
ValidatorOptions.ResourceProviderType = typeof(Prim.Mgp.Infrastructure.Resources.nl_BE);
break;
}
}

在此之后,Fluent Validation 将在相应的资源文件中查找翻译。

资源文件在一个单独的项目中。在这里,定义了所有 Fluent Validation 键,如 inclusivebetween_error 等。此外,还定义了各种属性,如 WeightValue。

最后,在验证器中,WithLocalizedName 用于本地化属性名称:

RuleFor(command => command.WeightValue).InclusiveBetween(20, 200).WithLocalizedName(() => Prim.Mgp.Infrastructure.Resources.nl_BE.WeightValue);       

关于c# - FluentValidation 未使用 Web API 中的文化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com