【发布时间】:2014-05-21 14:36:03
【问题描述】:
我有一个简单的 WebApi 2.1 项目,当我发布并将非必需可为空字段(双精度类型)的值留空时收到模型状态错误。我想保留 xml 元素,但允许它为空。我曾假设使该字段可为空可以处理此问题,但相反,如果我在薪水留空的情况下发布,我会收到错误(如下所列)。如果我输入一个数字......例如<salary>32000</salary>,一切都会按预期工作。
如何允许可为空的 double 设置一个空白值并仍然通过模型验证?
我收到的错误:
System.Web.Http.ModelBinding.ModelError:“XML 中有错误 文档 (1, 111)。”
我的模特:
public class Employee
{
[Required]
public string LastName { get; set; }
public string MiddleName { get; set; }
[Required]
public string FirstName { get; set; }
public double? Salary { get; set; }
}
我的控制器发布方法:
public HttpResponseMessage Post([FromBody]Employee employee)
{
if (ModelState.IsValid)
{
string firstName = employee.FirstName;
string lastName = employee.LastName;
if (employee.Salary != null)
{
double? salary = employee.Salary;
}
return Request.CreateResponse(HttpStatusCode.OK);
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.NoContent, ModelState);
}
}
这是我的实际帖子(列出了标题):
Content-Type: application/xml
Accept-Language: en-us
Accept: application/xml
<Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<LastName>Charlie</LastName>
<MiddleName>Bravo</MiddleName>
<FirstName>Alpha</FirstName>
<Salary></Salary>
</Employee>
【问题讨论】:
-
This blog 可能会有所帮助 - 特别是它提到配置更新的部分
"config.Formatters.XmlFormatter.UseXmlSerializer = true;" -
我确实有 config.Formatters.XmlFormatter.UseXmlSerializer = true;在我的 WebApiConfig 中。除非
值为空白,否则它可以很好地序列化和反序列化。 -
@user2315985 我在一个项目中遇到了同样的情况,作为快速修复,我只是将属性类型更改为字符串并稍后处理。它很脏但很快。我花了几个小时在这上面:(
-
正如你所建议的,我倾向于将属性更改为字符串,但这似乎不是正确的做法......应该有一种方法可以在 webapi 中处理这个问题。
标签: c# asp.net-mvc validation asp.net-web-api