我有一个客户使用MVC应用程序接收原始JSON请求。ModelBinder将传入的键值对映射到Controller Model属性上,这一点没有问题。
问题是,当他们发送无效的键/值对时,他们想要抛出一个错误,但我却找不到原始输入数据。
例如,如果我的模型有一个字符串属性"MName",但在他们的JSON请求中发送了"MiddleName":"M",ModelBinder将丢弃这个无效的键,并留下"MName"属性为空。这不会引发错误,ModelState.IsValid返回true。
我知道我可以在属性上添加"[Required]"特性,但那也不是正确的方法,因为该属性可能有空值,并且仍然不能解决检测不属于键值对的问题。
这不是过度发布的问题;我不想阻止传入的值绑定到模型。我试图检测传入的值是否未映射到模型中的任何内容。
由于这些值在请求体中以application/json的形式出现,我甚至无法访问、计数或枚举原始请求数据。我可以从ModelState.Keys中获取名称/值对,但这只包括成功映射的字段。这些键中没有一个在Request[]集合中。
是ASP.NET MVC 5,不是WebApi。WebAPI是否处理得有所不同?
有什么建议吗?
问题是,当他们发送无效的键/值对时,他们想要抛出一个错误,但我却找不到原始输入数据。
例如,如果我的模型有一个字符串属性"MName",但在他们的JSON请求中发送了"MiddleName":"M",ModelBinder将丢弃这个无效的键,并留下"MName"属性为空。这不会引发错误,ModelState.IsValid返回true。
我知道我可以在属性上添加"[Required]"特性,但那也不是正确的方法,因为该属性可能有空值,并且仍然不能解决检测不属于键值对的问题。
这不是过度发布的问题;我不想阻止传入的值绑定到模型。我试图检测传入的值是否未映射到模型中的任何内容。
由于这些值在请求体中以application/json的形式出现,我甚至无法访问、计数或枚举原始请求数据。我可以从ModelState.Keys中获取名称/值对,但这只包括成功映射的字段。这些键中没有一个在Request[]集合中。
是ASP.NET MVC 5,不是WebApi。WebAPI是否处理得有所不同?
有什么建议吗?
public class PersonModel
{
public string FName { get; set; }
public string LName { get; set; }
}
public class PersonController() : Controller
{
public ActionResult Save(PersonModel person)
{
if(ModelState.IsValid) // returns true
// do things
return View(person)
}
}
Dictionary<string, string>
用作你的操作参数,但这真的很丑:D - Yeldar Kurmangaliyev