我有以下具有两个查询参数(均为可选)的端点:
[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()
作为默认值,因为它不是编译时常量。
答案 0 :(得分:1)
您可以像这样使用安全的导航操作符(在C#6中引入):
public IHttpActionResult GetResources([FromUri]ResourceRequest request = null)
{
var resources = ResourceService.GetResources(request?.SiteId, request?.ServiceId);
return Ok(resources);
}
如果请求为空,则GetResources方法将为空。