是否有更好的方法使用[FromUri]处理默认查询参数?

时间:2019-12-18 00:43:31

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

我有以下具有两个查询参数(均为可选)的端点:

        [HttpGet]
        [Route("")]
        [ResponseType(typeof(List<ResourceResponse>))]
        public IHttpActionResult GetResources([FromUri]ResourceRequest request = null)
        {
            request = request ?? new ResourceRequest();
            var resources = ResourceService.GetResources(request.SiteId, request.ServiceId);
            return Ok(resources);
        }

这是我的请求对象:

    public class ResourceRequest
    {
        [DefaultValue(null)]
        public int? ClubId { get; set; }

        [DefaultValue(null)]
        [FromClubId(nameof(ClubId))]
        public int? SiteId { get; private set; }

        [DefaultValue(null)]
        public Guid? ServiceId { get; set; }
    }

此代码运行良好,但是我需要将request = request ?? new ResourceRequest();作为第一行来说明没有提交查询参数的情况。

是否有更好的方法来处理 no-query-parameters 方案?还是这样就好?

我需要将我的查询参数声明为ResourceRequest类,以便可以对它们运行验证属性。

我也不能使用new ResourceRequest()作为默认值,因为它不是编译时常量。

1 个答案:

答案 0 :(得分:1)

您可以像这样使用安全的导航操作符(在C#6中引入):

    public IHttpActionResult GetResources([FromUri]ResourceRequest request = null)
    {
        var resources = ResourceService.GetResources(request?.SiteId, request?.ServiceId);
        return Ok(resources);
    }

如果请求为空,则GetResources方法将为空。