繁体   English   中英

在Asp.Net WebApi操作中使用FromUri属性时,如果没有路由或查询字符串参数,是否可以强制实例化复杂的类?

[英]Can I force a complex class to be instantiated when using FromUri attribute in Asp.Net WebApi action without route or query string parameters?

我在下面定义了一个WebApi操作。
(我使用的MediatR库仅与我的问题有关)

[HttpGet]
[Route]
public async Task<IHttpActionResult> Search([FromUri] SearchTransactionsRequest request)
{
    var response = await _mediator.Send(request);
    return Ok(response);
}

以下网址已成功路由到我的操作:

/api/v1/transactions

但是,由于我没有定义任何路由参数,并且我并不总是添加查询字符串参数,因此SearchTransactionRequest类有时为null。 这给我造成了一个问题,因为我使用空对象调用_mediator.Send方法,并引发了异常。

可以理解,简单的解决方案是在操作中检查null并在需要时实例化一个对象,但是我不愿意这样做,并且希望使用更优雅的解决方案。

有没有办法确保我永远不会收到空项目作为动作参数?

也许通过某种方式拦截了参数绑定步骤...?

我只是遇到了同样的问题, Mediatr对null参数不满意,但是Web Api不允许我将其定义为可为空。

这是我能想到的最优雅的解决方案,而不会弄乱模型绑定逻辑。

/// <summary>
/// Returns all objects
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("")]
[ResponseType(typeof(IEnumerable<ObjectResponse>))]
public async Task<IHttpActionResult> GetObjects([FromUri] ObjectsGetRequest request) => 
  Ok(await this.mediator.Send(request ?? new ObjectsGetRequest()));

只需对[FromUri]注释的参数执行此操作,因此对我来说似乎并不那么麻烦。

这实际上与将每个查询字符串参数作为方法参数作为值类型列出的情况相同。

如果您要求请求者定义请求参数的值之一,则在将其发送给Mediatr之前,将其作为单独的[FromUri]参数进行分配,并将其分配给您的请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM