【问题标题】:C# Web API Optional parameters in query stringC# Web API 查询字符串中的可选参数
【发布时间】:2020-01-06 04:03:16
【问题描述】:

我的控制器中有这段代码:

[HttpGet]
[Route("team={team}&model={model}&date={date}&distance={distance}")]
public IHttpActionResult FindVehicle([FromUri]string team = "", [FromUri]string model = "", [FromUri]DateTime? date = null, [FromUri]double distance = 0.0)
    { }

查询字符串的所有参数都可以是可选的,这就是我使用默认值的原因。

但是,我不确定路由应该是什么,因为现在,例如,当我不指定 model 参数时,它在端点中的值最终是 "model",而不是 ""

【问题讨论】:

    标签: c# asp.net-web-api http-get


    【解决方案1】:

    您不必在Route 属性中定义FromUri 元素,它们将被绑定到开箱即用:

    [HttpGet]
    [Route("route_name")]
    public IHttpActionResult FindVehicle([FromUri]string team = "", [FromUri]string model = "", [FromUri]DateTime? date = null, [FromUri]double distance = 0.0)
    { 
    
    }
    

    如果您使用的是 ASP.Net Core,那么您应该改用 [FromQuery]

    【讨论】:

    • 但是您可以提高透明度和代码风格吗?
    • @liqSTAR 绝对是一个选项,它确实归结为偏好和定义的风格。在我看来,用相同的属性装饰参数会给方法签名增加噪音。我只会在有不同来源绑定模型的情况下使用它。 (例如ApiMethod([FromUri] string p1, [FromBody] string p2, [FromHeader] string p3)
    • 这里如何传递字符串模型作为可选参数?
    猜你喜欢
    • 2012-08-05
    • 2013-04-10
    • 2015-02-02
    • 2023-02-09
    • 2016-04-25
    • 2018-03-27
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多