ASP.NET WebAPI将urlencoded body中的空字符串传递为null

我有一个简单的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是否可以区分空值和缺失值?


您是否尝试使用DisplayFormatAttribute注释该属性,

public class Order
{
    [DisplayFormat(ConvertEmptyStringToNull=false)]
    public string Notes { get; set; }
}

它的根源自于调用string.IsNullOrWhiteSpace而不是string.IsNullOrEmptyReplaceEmptyStringWithNull

要在整个WebAPI项目中解决这个问题,您需要将ModelMetadataProviderConvertEmptyStringToNull设置为false

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

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

链接地址: http://www.djcxy.com/p/68903.html

上一篇: ASP.NET WebAPI passing empty string in urlencoded body as null

下一篇: Primefaces dynamic label for progressbar