簡體   English   中英

HttpPost 的 FromBody 和 FromQuery 屬性失敗,返回“發生一個或多個驗證錯誤”

[英]FromBody and FromQuery attributes fail for HttpPost, returns "One or more validation errors occurred"

請看我的 c# core api 代碼如下:

[HttpPost]
public bool Save([FromBody] string data,[FromQuery] ICollection<int> list)
{
  var result = true;           
  return result;     
}

和角度后調用如下:

postAction(data: any, list: number[]): Observable<any> {
  let params = new HttpParams().set('scopes', JSON.stringify(list));
  return this.httpClient.post( `${this.apiUri}/Save`,data, { params });
}

有了這些,我收到狀態代碼為 400 的“發生一個或多個驗證錯誤”錯誤。

我們不能同時使用 FromBody 和 FromQuery 嗎?

更新1:

代碼詳細信息 400 未記錄的錯誤:響應正文

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "00-b6e1d156b5ff1940a6186060c4902663-36e8ff61a6d6374b-00",
  "errors": {
    "$": [
      "'s' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0."
    ]
  }
}

代碼未到達控制器,因為 ASP.NET Core 運行驗證以斷言請求中的數據有效並且可以映射到您的操作的參數。 向 ASP.NET Core 發送數據時,重要的是數據的結構符合操作的預期,否則,框架會返回 BadRequest 響應(狀態碼 400)。

在您的代碼中,查詢參數名為list ,在 Angular 代碼中,您將其作為scopes發送。 這些應該匹配,因此您應該重命名其中之一(或使用FromQuery的構造函數參數將名稱設置為scopes )。

此外,刪除查詢參數的JSON.stringify並分配數組。 然后,該 url 將具有多個scopes值,例如:

/mycontroller/?scopes=1&scopes=3&scopes=5

ASP.NET Core Web API 以不同的方式解析 URI,並將值分配給scopes參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM