我正在寻找正确的方法来处理查询字符串中的空参数。 Web Api不接受查询字符串为“?id = 1 & category =”,这似乎是合理的,但我需要处理这种情况。Web Api:在查询字符串中传递一个空参数
的快速和肮脏的解决方案是使用,这将在服务器端被解释为自定义值(比方说“(空)”为例),但我还不满意吗?
任何建议?
谢谢。
我正在寻找正确的方法来处理查询字符串中的空参数。 Web Api不接受查询字符串为“?id = 1 & category =”,这似乎是合理的,但我需要处理这种情况。Web Api:在查询字符串中传递一个空参数
的快速和肮脏的解决方案是使用,这将在服务器端被解释为自定义值(比方说“(空)”为例),但我还不满意吗?
任何建议?
谢谢。
我过去处理过的一种方法是创建一个类来保存参数,然后使用ModelBinder属性将您的查询参数绑定到类属性。
所以,你的类将是这个样子:
public class QueryParams
{
public string Category {get; set;}
public int Id {get; set;}
}
,并且该方法在API控制器是这样的:
public objectToReturn Get([ModelBinder] QueryParams)
{
//code here
}
这样,如果在查询字符串的参数之一没有价值,它只会被忽略。
你可以使用这个属性来实现你想要的。
[DisplayFormat(ConvertEmptyStringToNull = false)]
如果“category”丢失,则它将为空。 否则,如果“category =”或“category =”,那么将是一个空字符串或空白。
非常好 - 这正是我一直在寻找的 –
谢谢,这个解决方案的作品。但是,这意味着我将我的类别的空值解释为控制器中的空字符串。我希望“category =”将被解释为空字符串,并且在我的查询字符串中缺少此参数为空。 – jpo
解决此问题的一种方法是将一个构造函数添加到QueryParams类,然后使用它将'string.empty'分配给Category属性。 – James
这是我处理资源规划应用程序中的类似情况的方式,我有一个自定义的DateTime,可以是直接的日期时间或一组关键字,如“暂停”或空白。 – jfrankcarr