2017-08-01 167 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的輸入的不明確性。

相關問題