覆盖ModelBindingMessageProvider错误消息

时间:2019-02-25 04:24:56

标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-webapi

我有一个.net core 2.2 webapi。有一个POST动作接受一个模型。该模型具有Guid作为属性之一。当我发布此模型但提供字符串而不是Guid时,我得到了ModelState.IsValid = false,这是正确的。默认的模型绑定错误消息为"Error converting value \"string\" to type 'System.Guid'. Path 'memberId', line 3, position 22."。这不是我要返回的友好消息,并且该消息还需要本地化为用户的语言。我读过的所有资源都说我需要在ModelBindingMessageProvider选项中为AddMvC()设置访问器。即

services.AddMvc(options => options.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor((x, y) => "blah blac");

我在此处设置了所有访问器,但它仍然没有更改默认消息。有谁知道如何设置这些默认值?

1 个答案:

答案 0 :(得分:0)

问题是InputFormatter引发异常,并且异常消息用于modelstate条目。您可以在services.AddMvc().AddJsonOptions(options => options.AllowInputFormatterExceptionMessages = false;)中禁用它。这将为错误消息添加一个空字符串,您可以检测到该字符串,然后向用户显示常规消息。我还没有找到更好的方法来执行此操作,但是此方法现在就足够了。