2013-10-16 122 views
3

我正在寻找正确的方法来处理查询字符串中的空参数。 Web Api不接受查询字符串为“?id = 1 & category =”,这似乎是合理的,但我需要处理这种情况。Web Api:在查询字符串中传递一个空参数

的快速和肮脏的解决方案是使用,这将在服务器端被解释为自定义值(比方说“(空)”为例),但我还不满意吗?

任何建议?

谢谢。

回答

3

我过去处理过的一种方法是创建一个类来保存参数,然后使用ModelBinder属性将您的查询参数绑定到类属性。

所以,你的类将是这个样子:

public class QueryParams 
{ 
    public string Category {get; set;} 
    public int Id {get; set;} 
} 

,并且该方法在API控制器是这样的:

public objectToReturn Get([ModelBinder] QueryParams) 
{ 
    //code here 
} 

这样,如果在查询字符串的参数之一没有价值,它只会被忽略。

+0

谢谢,这个解决方案的作品。但是,这意味着我将我的类别的空值解释为控制器中的空字符串。我希望“category =”将被解释为空字符串,并且在我的查询字符串中缺少此参数为空。 – jpo

+0

解决此问题的一种方法是将一个构造函数添加到QueryParams类,然后使用它将'string.empty'分配给Category属性。 – James

+0

这是我处理资源规划应用程序中的类似情况的方式,我有一个自定义的DateTime,可以是直接的日期时间或一组关键字,如“暂停”或空白。 – jfrankcarr

1

你可以使用这个属性来实现你想要的。

[DisplayFormat(ConvertEmptyStringToNull = false)] 

如果“category”丢失,则它将为空。 否则,如果“category =”或“category =”,那么将是一个空字符串或空白。

+0

非常好 - 这正是我一直在寻找的 –

相关问题