【发布时间】:2016-03-12 13:17:18
【问题描述】:
我正在尝试将多个参数传递给 httpget web api 函数。我遇到的关键问题是空查询字符串参数被转换为 null。
我可以通过创建如下所示的类来解决这个问题:
public class CuttingParams
{
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string batch_number { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string filter { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string initiation_month { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string initiation_year { get; set; }
}
但我绝对讨厌必须创建一个类以供一次性使用的想法。
我做了很多研究,并且真的很难找到一种方法来改变上述以外的默认行为。我真的只想这样做:
[HttpGet]
public object Search(string batch_number, string filter, string initiation_month, string initiation_year)
{
}
我是否缺少一种简单的方法来更改此默认行为,或者我应该考虑什么来实现我自己的可以全局应用的查询字符串解析器?
谢谢
更新
我的帖子似乎有些混乱,如果我不清楚,请见谅。我会尽量澄清。
我只想将简单的原始类型传递给我的 HttpGet 方法,如第二个代码 sn-p 所示。我遇到的问题是空字符串参数将被转换为null。
ie. this url: http://localhost/api/cutting/search?batch_number=&filter=&intiation_month=Jan&initiation_year=2016
将在 api 中产生以下值:
batch_number = null
filter = null
initiation_month = Jan
initiation_year = 2016
如果我将搜索功能更改为使用第一个代码 sn-p 中的类,它将按我的意愿工作,但我真的尽量避免长期使用类作为 api 参数。
【问题讨论】:
-
我正在尝试了解您的预期结果。在您的示例中,您是否希望参数未绑定它们设置为空字符串而不是
null? -
你试过
DefaultValueAttribute吗?比如:[DefaultValue("")] public string initiation_year { get; set; } -
@Nkosi 我所追求的是将参数设置为我传入的确切内容,即。如果我传入一个空字符串,我希望它是一个空字符串,此刻,如果我传入一个空字符串,参数值将为null
-
@Khanh_TO 具有 displayformat 属性的类正在工作,我不想创建一个类,我只想使用第二个代码 sn-p 中所示的单个参数
-
我从您的问题中得到了答案(=现在使用:ConvertEmptyStringToNull = false)。不错!
标签: c# asp.net asp.net-web-api asp.net-web-api2