ASP.NET Core настраивает ошибку при сбое привязки модели - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь применить внутреннюю проверку всякий раз, когда пустые или недействительные значения отправляются в конечную точку ASP.NET Core Web API, но я не могу понять, как обрабатывать ошибки сбоя привязки модели.

Получение этой ошибки, вероятно, из ModelState при отправке недопустимых значений: totalPrice: ["Could not convert string to decimal: . Path 'totalPrice', line 1, position 71."] 0: "Could not convert string to decimal: . Path 'totalPrice', line 1, position 71." Похоже, что привязка модели не выполняется и ошибка отображается непосредственно клиенту.

У меня довольно простой контроллер с атрибутом ApiController.

[ApiController]
public class ProductsController
{
    [HttpPost]
    public IActionResult Post([FromBody]CreateProductDto model)
    {    
        model.Id = await service.CreateProduct(model);

        return CreatedAtRoute(
            routeName: "GetProduct", 
            routeValues: new { id = model.Id }, 
            value: model
        );
    }
}

и моя модель DTO

public class CreateProductDto
{
    [Required(ErrorMessage = "Invalid value")]
    public decimal totalPrice { get; set;}

    public int count { get; set; }
}

Есть ли способ настроить текст по ошибкам привязки модели?Я бы хотел, чтобы конфиденциальная информация не отправлялась и не оставляла дружественный отзыв клиенту?

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете настроить сообщение об ошибке из класса запуска в методе ConfigureServices.Вы можете увидеть подробности Документ Microsoft .

Вот пример -

services.AddMvc(options =>
            {
                var iStrFactory = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();
                var L = iStrFactory.Create("ModelBindingMessages", "WebUI"); // Resource file location 
                options.ModelBindingMessageProvider.SetValueIsInvalidAccessor((x) => L["The value '{0}' is invalid."]);

                options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor((x) => L["The field {0} must be a number."]);
                options.ModelBindingMessageProvider.SetMissingBindRequiredValueAccessor((x) => L["A value for the '{0}' property was not provided.", x]);
                options.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor((x, y) => L["The value '{0}' is not valid for {1}.", x, y]);
                options.ModelBindingMessageProvider.SetMissingKeyOrValueAccessor(() => L["A value is required."]);
                options.ModelBindingMessageProvider.SetUnknownValueIsInvalidAccessor((x) => L["The supplied value is invalid for {0}.", x]);
                options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor((x) => L["Null value is invalid.", x]);
            });

Вы можете прочитать этот блог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...