私はC#WebApiプロジェクトを持っており、クライアント入力の検証にFluentValidation.WebApiパッケージを使用しています。fluentvalidationエラーメッセージには、クライアントサイドのJSONプロパティ名ではなく、C#のプロパティ名が含まれていますか?
以下は、IsPremiumという名前のC#プロパティを持つモデルクラスコードです。この同じプロパティーには、すべてのクライアントのjson名 "isLuxury"があります。
[Serializable, JsonObject, Validator(typeof(ProductValidator))]
public class Product
{
[JsonProperty("isLuxury")]
public bool? IsPremium { get; set; }
}
そして、私のバリデータクラスは、次のようになります。 http://localhost:52664/api/product
リクエストボディ::{ "isLuxury": "" }
だから、のような要求のために
public class ProductValidator : AbstractValidator<Product>
{
public ProductValidator()
{
RuleFor(product => product.isPremium).NotNull();
}
}
次のエラーが発生する:
{
"Message": "The request is invalid.",
"ModelState": {
"product.isPremium": [
"'is Premium' must not be empty."
]
}
}
ここで流暢なのは、 "isLuxury"としてそれを知っているので、クライアントには意味をなさないC#のプロパティ名を選ぶことです。 "isLuxury"のようなより良いバリデーションを与えるために、C#のプロパティからではなく、jsonのプロパティから名前を選ぶように強制することができますか?
可能であれば、すべてのクライアントに公開されているこれらのjsonと同じ名前になるように、すべてのC#プロパティの名前を変更する必要があります。この問題を解決する他の方法があれば教えてください。
[デフォルトのプロパティ名を上書きする](https://github.com/JeremySkinner/FluentValidation/wiki/d.-Configuring-a-Validator#overriding-the-default-property-name )を使用してJsonプロパティ名を使用します。 – stuartd
でも、私は "product.isPremium"を得るので、これは部分的に問題を解決します:["'isLuxury'は空であってはいけません] - 今はproduct.isPremiumはapiのエンドユーザーにとって意味がありません。私もそれを変更することはできますか? – maverick
それを持って、私はOverridePropertyNameを使用しなければならなかった。ご協力いただきありがとうございます。 – maverick