C# 如何允许引用类型参数的请求正文为空?

C# 如何允许引用类型参数的请求正文为空?,c#,.net-core,get,postman,C#,.net Core,Get,Postman,我正在构建一个.Net核心api控制器,我希望允许用户发送带有或不带有MyRequest类作为参数的GET请求,因此使用GET(null)调用方法就可以了 获取api/myModels请求方法: [HttpGet] public ActionResult<IEnumerable<MyModel>> Get(MyRequest myRequest) { if (myRequest == null) myRequest = new myRequest(

我正在构建一个.Net核心api控制器,我希望允许用户发送带有或不带有
MyRequest
类作为参数的
GET
请求,因此使用
GET(null)
调用方法就可以了

获取api/myModels
请求方法:

[HttpGet]
public ActionResult<IEnumerable<MyModel>> Get(MyRequest myRequest)
{
    if (myRequest == null)
        myRequest = new myRequest();

    var result = this._myService.Get(myRequest.Filters, myRequest.IncludeProperties);
    return Ok(result);     
}
当我使用带有Body的
Postman
引用这个
Get
方法时,它是有效的。 问题是,当我将主体保持为空(以
MyRequest
null对象作为参数调用Get方法,如
Get(null)
)时,我得到了
邮递员的以下信息:

“需要非空的请求正文。”


有一个类似的参数,但参数是值类型。

您可以通过指定默认值
null
并明确指定这些值将作为请求url的一部分来将其作为可选参数

[HttpGet]
public ActionResult<IEnumerable<MyModel>> Get([FromQuery]MyRequest myRequest = null)
{
现在有了以上内容,您可以像

GET api/myModels?Filters=
这样做:

  services.AddControllersWithViews(options =>
  {
       options.AllowEmptyInputInBodyModelBinding = true;
  });

这里面有什么。_myService.Get
方法?您要么需要在
\u myService.Get
方法中处理空请求,要么创建
\u myService.Get
方法重载,而不使用
过滤器
IncludeProperties
参数。使用带有默认参数值的
Get()
方法,或者使用
Get(null)
调用有什么区别?结果将是相同的“需要一个非空的请求正文”。因为OP正在将该
请求
值传递给某个
this.\u myService.Get
方法,该方法可能返回上述错误。@SᴇM、 区别?是的,如果您想在不使用过滤器的情况下获取所有数据(在本例中)?@Rahul我只是说,使用默认参数调用
get(null)
get()
是相同的。这并不能解决OP的问题。@ShaharShokrani见编辑的答案。如果这有助于确认其有效性,请编辑
[FromQuery]
的答案。应选择此答案作为正确的解决方案。前面的答案不起作用。
GET api/myModels?Filters=
  services.AddControllersWithViews(options =>
  {
       options.AllowEmptyInputInBodyModelBinding = true;
  });