【问题标题】:Sending blank (null) values to my web api service将空白(null)值发送到我的 Web api 服务
【发布时间】:2014-08-19 10:55:33
【问题描述】:

我的 web api 控制器中有一个小函数,如下所示:

public IEnumerable<IEmployee> GetEmployeesByFullName(string firstName, string lastName)
{
    var data = EmployeeDataProvider.GetEmployeeByFullName(firstName, lastName).ToList();
    return data;
}

我希望能够在名字或姓氏中使用空白值来调用它,但我真的不能这样做。我想简单地在 URL 中做。

不能以某种方式发送/GetEmployeesByFullName//Doe/吗?我是否必须将其作为发布数据发送,才能发送空白值?

如果我这样做 /GetEmployeesByFullName//Doe/ 我被告知在控制器上没有匹配的操作。 在我的路线中,将参数设置为可选,似乎没有任何区别。我根本不打这个功能。

【问题讨论】:

  • 我不确定,但你可以试试 Nullable Types msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
  • 您可以使用/GetEmployeesByFullName//GetEmployeesByFullName/Something/,但不能使用/GetEmployeesByFullName//Something
  • 我认为您可能需要为/GetEmployeesByFirstName/John/GetEmployeesByLastName/Doe 提供额外的路由

标签: c# asp.net-mvc asp.net-web-api2


【解决方案1】:

正如 mostruash 所指出的,你不能用/GetEmployeesByFullName//Something 来做,因为 MVC 不支持有两个可选参数。只有最后一个参数可以是可选的(请参阅this stackoverflow question)。如果你想通过 URL 来做,为什么不简单地把它声明为参数:

/GetEmployeesByFullName?firstname=xxx&lastname=yyy

这样,两者都可以为空:

/GetEmployeesByFullName?firstname=xxx // the method is called with lastname = null
/GetEmployeesByFullName?lastname=yyy // the method is called with firstname = null

如果您有两个参数都将被填写的用例,您可以像这样添加路由:

    routes.MapRoute(
        name: "GetEmployees",
        url: "GetEmployeesByFullName/{firstname}/{lastname}",
        defaults: new { controller = "Default", action = "GetEmployeesByFullName", firstname = UrlParameter.Optional, lastname = UrlParameter.Optional }
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-02-15
    相关资源
    最近更新 更多