c# - Overriding ModelState's very technical error messages -
i have following code:
public class eventcontroller : apicontroller { public ihttpactionresult post(list<event> events) { if (!modelstate.isvalid) { return badrequest(modelstate); } else { foreach (event event in events) { debug.writeline(event.importance.tostring()); debug.writeline(event.date.tostring()); debug.writeline(event.description); } return ok(); } } } public class event { [dataannotationsextensions.integer(errormessage = "{0} must number.")] [range(0,10),required()] public int? importance { get; set; } public datetime date { get; set; } [regularexpression(@"^.{20,100}$", errormessage="{0} must between 20 , 100 characters.")] public string description { get; set; } } and i'm posting following json:
[{"importance":"1.1","date":"2015-03-12","description":""},{"importance":"6","date":"2015-10-02","description":"a"}] the response is:
{ "message": "the request invalid.", "modelstate": { "events[0].importance": [ "could not convert string integer: 1.1. path '[0].importance', line 1, position 20.", "the importance field required." ], "events[1].description": [ "description must between 20 , 100 characters." ] } }
i'm concerned "could not convert string integer: 1.1. path '[0].importance', line 1, position 20." i'd override message more friendly , less revealing, perhaps "importance must number.". ideally i'd define default conversion error in dataannotation. tried using dataannotationsextensions nuget found here http://dataannotationsextensions.org/ unfortunately targets mvc , not override modelstate errors. if isn't possible override, i'm curious common workarounds might be.
one solution (what don't lot) use object type instead of int? type:
public class event { [dataannotationsextensions.integer(errormessage = "{0} must number.")] [range(0,10),required()] public object importance { get; set; } ... } if conversion default message overridden.
Comments
Post a Comment