ASP.NET Core MVC has a great model binding & model validation subsystem which supports almost any scenario. But when developing APIs things can go a little more complicated.
Suppose we have a model class with a property XYZ which is annotated with [MinLength(5)].
public class ViewModel
{
[MinLength(5)]
public string XYZ { get; set; }
}
If anything goes wrong with this property what MVC will give you is something like this:
{ "XYZ": [ "The field XYZ must be a string or array type with minimum length of '5'" ] }
But this is not what the client needs! The client needs an object with specific details. She will create her own message however she wants to:
{ "error": "minLength", "property": "XYZ", "minimum": 5 }
Possible Solutions:
- You can use
InvalidModelStateResponseFactoryto generate customized responses. It gives you theActionContextwhich contains theModelStateproperty. But all you can do is to process error messages which are pure strings! That could lead to some problems. - Another option is to completely disable the MVC Validation and implement one for yourself.
I appreciate any other solutions.