2017-08-01 78 views
1
[HttpPost("test")] 
public IActionResult Teste(int? id) 
{ 
    if (!id.HasValue) 
     return BadRequest(); 

    ... 
} 

如何在不使用'int?'的情况下返回badrequest?如果客户端不发送ID?对于缺少所需参数的返回错误请求(400)

在这种情况下,有一些简单的方法可以自动返回badrequest?

+1

目前还不清楚你在问什么。问题是什么。问题中的代码应该执行你所问的内容。 – Nkosi

+0

因为如果我使用'int',如果客户端不发送id,id将为0,这对我来说是一个问题。当客户端不发送某些参数时,有一些简单的方法可以自动返回badrequest? –

+0

使参数可选'int? id = null' – Nkosi

回答

1

的默认值你为什么不干脆把ID路径就像这样:

[HttpPost("test/{id}")] 
public IActionResult Teste(int id) 
{ 
    if (id == default(int)) 
     return BadRequest(); 

    ... 
} 

您仍然可以确保如果你愿意,这个id不是0(或者更复杂的验证)。 这不会产生400错误的请求响应,但我会说这是最合适的方式来做到这一点。除非你想让用户通过请求正文中的id,否则你可以做例如属性验证并检查ModelState以返回错误的请求。

+0

我试图跳过额外的验证。这个'如果'将不仅需要添加到每个控制器,而且还要添加到该控制器的每个动作。 –

+0

但是,如果你只是忽略if语句,你应该很好去。这将强制客户端始终传入一个id(在路径中)。如果客户主动选择传递一个无效的ID(例如0),这又是另一种情况,但我看不到如何验证这一点...... –

-1

可以使参数可选有这样

[HttpPost("test")] 
public IActionResult Teste(int id=0) 
{ 
    if (id==0) 
     return BadRequest(); 

    ... 
} 
1

我不知道如何自动在参数无效的情况下发送400,但是,作为一个快速的解决方法,你可以做这样的事情:

public IActionResult Teste(int id = -1) 

设置的默认值,你可以轻松识别无效参数并返回400或做任何你喜欢的事情。

此外,这消除了您提到的值为0的输入的不明确性。

相关问题