7

我有一个简单的 ApiController

public HttpResponseMessage Put(int orderid, [FromBody] Order order)
{
    // Do something useful with order.Notes here
}

和一个类(实际的类包含更多属性)

public class Order
{
    public string Notes { get; set; }
}

并希望处理以下类型的 PUT 请求

PUT http://localhost/api/orders/{orderid}
Content-Type: application/x-www-form-urlencoded

notes=sometext

一切正常,但空值作为 null 传递

notes=blah            // passes blah
notes=                // Passes null
someothervalue=blah   // Passes null

是否可以让 ApiController 区分空值和缺失值?

4

2 回答 2

3

您是否尝试过使用 DisplayFormatAttribute 注释属性,例如,

public class Order
{
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string Notes { get; set; }
}
于 2013-01-30T18:06:14.180 回答
2

其根源来自ReplaceEmptyStringWithNullthat 调用string.IsNullOrWhiteSpace而不是string.IsNullOrEmpty

要在整个 WebAPI 项目中解决此问题,您需要将 替换ModelMetadataProviderConvertEmptyStringToNullfalse

请参阅将 DisplayFormatAttribute.ConvertEmptyStringToNull 的默认设置为 false

这实际上是在 v6 中“修复”的 - 请参阅https://github.com/aspnet/Mvc/issues/3593

于 2016-04-11T20:04:04.040 回答