Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在没有路由或查询字符串参数的Asp.NETWebAPI操作中使用FromUri属性时,是否可以强制实例化复杂类?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

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

C# 在没有路由或查询字符串参数的Asp.NETWebAPI操作中使用FromUri属性时,是否可以强制实例化复杂类?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,我有一个定义如下的WebApi操作。 (我使用的是MediatR库,它与我的问题仅略有关联) 但是,由于我没有定义任何路由参数,也不总是添加查询字符串参数,因此类SearchTransactionRequest有时将为空。这给我带来了一个问题,因为我使用null对象调用了\u mediator.Send方法,它抛出了一个异常 可以理解,简单的解决方案是在动作中检查null,并在需要时实例化一个对象,但我不愿意这样做,我希望有一个更优雅的解决方案 有没有办法确保我永远不会收到空项作为操作参数 也许

我有一个定义如下的WebApi操作。
(我使用的是MediatR库,它与我的问题仅略有关联)

但是,由于我没有定义任何路由参数,也不总是添加查询字符串参数,因此类
SearchTransactionRequest
有时将为空。这给我带来了一个问题,因为我使用null对象调用了
\u mediator.Send
方法,它抛出了一个异常

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

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


也许通过某种方式截取参数绑定步骤…?

我遇到了与
Mediatr
完全相同的问题,对null参数不满意,但Web Api不允许我将其定义为null

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

/// <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()));
//
///返回所有对象
/// 
/// 
/// 
[路线(“”)
[责任类型(类型(IEnumerable))]
公共异步任务GetObjects([FromUri]ObjectsGetRequest请求)=>
Ok(等待这个.mediator.Send(请求??新的ObjectsGetRequest());
这只需要对
[FromUri]
带注释的参数执行,这样对我来说就不会那么麻烦了

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

如果您要求请求者定义一个请求参数值,请将其作为一个单独的
[FromUri]
参数取出,并将其分配给您的请求,然后再将其发送到
Mediatr

/api/v1/transactions
/// <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()));