【问题标题】:Web Api: Pass an empty parameter in a query stringWeb Api:在查询字符串中传递一个空参数
【发布时间】:2013-10-16 08:00:00
【问题描述】:

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

快速而肮脏的解决方案是使用将在服务器端解释的自定义值(例如“(空)”),但我对此不满意......

有什么建议吗?

谢谢。

【问题讨论】:

    标签: asp.net-mvc query-string asp.net-web-api


    【解决方案1】:

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

    所以你的班级看起来像这样:

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

    您的 api 控制器中的方法如下所示:

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

    这样,如果查询字符串中的参数之一没有值,它将被简单地忽略。

    【讨论】:

    • 谢谢,这个解决方案有效。但是,这意味着我将类别的空值解释为控制器中的空字符串。我希望 "category=" 将被解释为字符串为空,并且我的查询字符串中缺少此参数为 null。
    • 解决此问题的一种方法是将构造函数添加到 QueryParams 类,然后使用它将string.empty 分配给 Category 属性。
    • 这是我在资源规划应用程序中处理类似情况的方式,在该应用程序中,我有一个自定义的 DateTime,它可以是直接的日期时间,也可以是一组关键字,如“暂停”或空白.
    【解决方案2】:

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

        [DisplayFormat(ConvertEmptyStringToNull = false)]
    

    如果“类别”缺失,那么它将为空。 否则,如果 "category=" 或 "category=" 则为空字符串或空格。

    【讨论】:

    • 优秀——这正是我一直在寻找的
    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2021-01-13
    • 2010-10-17
    相关资源
    最近更新 更多