我有一個基本的 CRUD API,它將模型保存到運行良好的 MongoDB。
該模型如下所示:
[BsonIgnoreExtraElements]
public class Configuration
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[Display(Name = "Parameter Name")]
[Required]
public string ParamName { get; set; }
[Display(Name = "Parameter Value")]
[Required]
public string ParamValue { get; set; }
public string Description { get; set; }
}
我的動作是這樣的:
[HttpPost(Name = "Create")]
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<ApiResult>> Create(Configuration configuration)
{
try
{
var res = await _configurationRepository.Add(configuration);
// DO OTHER STUFF
}
catch (Exception ex)
{
//error handling stuff
}
}
當我將此代碼移植到 .NET 6 時,我通過 Postman 嘗試了上述操作,但出現此錯誤:
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "發生一個或多個驗證錯誤。",
"status": 400,
"Id 欄位是必須的。”
知道為什么會這樣嗎?字串欄位也是如此。這只是一個例子,基本上我的大部分動作都不會因為這個變化而起作用。
uj5u.com熱心網友回復:
這是由于 ASP.Net 6(非空參考型別)中的一些模型驗證更改
能夠通過執行以下操作來解決此問題:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-6.0
services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);
uj5u.com熱心網友回復:
這是因為[BsonId]需要設定字串。
參考見源代碼:https : //github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Bson/Serialization/Attributes/BsonRequiredAttribute.cs
您應該為端點創建一個不同的模型,并將該模型映射到您的資料模型,并Id用一個值填充該欄位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401349.html
標籤:asp.net核心 asp.net-web-api .net-6.0 视觉工作室2022
