C# 如何允许引用类型参数的请求正文为空?
我正在构建一个.Net核心api控制器,我希望允许用户发送带有或不带有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(
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;
});