Asp.net CORE 3.0 web API 方法总是接收 NULL 值
Asp.net CORE 3.0 web API method always receives NULL value
我的 Angular 应用程序有问题。基本上问题是它显示 500 服务器错误。
这些是我的方法:
/*Product Service*/
addNewProduct(newProduct: Product): Observable<Product> {
console.log(newProduct);
return this.http.post<Product>(this.productUrl, newProduct);
}
/*Product-list.component.ts*/
onSubmit() {
let newProduct = this.insertForm.value;
console.log(newProduct);
this.productService.addNewProduct(newProduct).subscribe(
result => {
this.productService.clearCache();
this.products$ = this.productService.getProducts();
this.products$.subscribe(newlist => {
this.products = newlist;
this.modalRef.hide();
this.insertForm.reset();
});
console.log("New Product added");
},
error => {
console.error(error);
}
)}
这是我的 C# 方法
[HttpPost("[action]")]
[Authorize(Policy = "RequiredAdministratorRole")]
public async Task<ActionResult> AddProduct([FromBody] Product formdata)
{
var newproduct = new Product
{
Name = formdata.Name,
Description = formdata.Description,
ImageURL = formdata.ImageURL,
OutOfStock = formdata.OutOfStock,
Price = formdata.Price
};
await _db.Products.AddAsync(newproduct);
await _db.SaveChangesAsync();
return Ok(new JsonResult("The product has been added successfully"));
}
错误如下:
HttpErrorResponse {headers: HttpHeaders, status: 500, statusText: "OK", url: "https://localhost:44382/api/product/addproduct", ok: false, …}
POST https://localhost:44382/api/product/addproduct 500
有人可以帮助我吗?
提前致谢。
您的错误很可能是由于formdata
没有正确反序列化,导致在访问成员时出现 NullReferenceException。
在尝试访问 formdata
.
的成员之前,您可以通过检查 ModelState.IsValid 属性 是否为真来捕获此问题
[HttpPost("[action]")]
[Authorize(Policy = "RequiredAdministratorRole")]
public async Task<ActionResult> AddProduct([FromBody] Product formdata)
{
if (ModelState.IsValid)
{
var newproduct = new Product
{
Name = formdata.Name,
Description = formdata.Description,
ImageURL = formdata.ImageURL,
OutOfStock = formdata.OutOfStock,
Price = formdata.Price
};
await _db.Products.AddAsync(newproduct);
await _db.SaveChangesAsync();
return Ok(new JsonResult("The product has been added successfully"));
}
else
{
// Let the client know the data they passed was not valid.
return BadRequest();
}
}
我自己发现了这个问题,问题基本上是端点希望收到一个结构良好的模型,但是在 HTML 代码中有一个 'text' 类型的输入 'number',这似乎影响了 Angular 界面。如果有人需要带有 Angular 8 示例应用程序的 asp.net 核心 3.1,请随时克隆我的存储库以验证我的代码并了解更多信息。
https://github.com/gitrodo/asp-net-core-angular-8
谢谢。
我的 Angular 应用程序有问题。基本上问题是它显示 500 服务器错误。
这些是我的方法:
/*Product Service*/
addNewProduct(newProduct: Product): Observable<Product> {
console.log(newProduct);
return this.http.post<Product>(this.productUrl, newProduct);
}
/*Product-list.component.ts*/
onSubmit() {
let newProduct = this.insertForm.value;
console.log(newProduct);
this.productService.addNewProduct(newProduct).subscribe(
result => {
this.productService.clearCache();
this.products$ = this.productService.getProducts();
this.products$.subscribe(newlist => {
this.products = newlist;
this.modalRef.hide();
this.insertForm.reset();
});
console.log("New Product added");
},
error => {
console.error(error);
}
)}
这是我的 C# 方法
[HttpPost("[action]")]
[Authorize(Policy = "RequiredAdministratorRole")]
public async Task<ActionResult> AddProduct([FromBody] Product formdata)
{
var newproduct = new Product
{
Name = formdata.Name,
Description = formdata.Description,
ImageURL = formdata.ImageURL,
OutOfStock = formdata.OutOfStock,
Price = formdata.Price
};
await _db.Products.AddAsync(newproduct);
await _db.SaveChangesAsync();
return Ok(new JsonResult("The product has been added successfully"));
}
错误如下:
HttpErrorResponse {headers: HttpHeaders, status: 500, statusText: "OK", url: "https://localhost:44382/api/product/addproduct", ok: false, …}
POST https://localhost:44382/api/product/addproduct 500
有人可以帮助我吗?
提前致谢。
您的错误很可能是由于formdata
没有正确反序列化,导致在访问成员时出现 NullReferenceException。
在尝试访问 formdata
.
[HttpPost("[action]")]
[Authorize(Policy = "RequiredAdministratorRole")]
public async Task<ActionResult> AddProduct([FromBody] Product formdata)
{
if (ModelState.IsValid)
{
var newproduct = new Product
{
Name = formdata.Name,
Description = formdata.Description,
ImageURL = formdata.ImageURL,
OutOfStock = formdata.OutOfStock,
Price = formdata.Price
};
await _db.Products.AddAsync(newproduct);
await _db.SaveChangesAsync();
return Ok(new JsonResult("The product has been added successfully"));
}
else
{
// Let the client know the data they passed was not valid.
return BadRequest();
}
}
我自己发现了这个问题,问题基本上是端点希望收到一个结构良好的模型,但是在 HTML 代码中有一个 'text' 类型的输入 'number',这似乎影响了 Angular 界面。如果有人需要带有 Angular 8 示例应用程序的 asp.net 核心 3.1,请随时克隆我的存储库以验证我的代码并了解更多信息。
https://github.com/gitrodo/asp-net-core-angular-8
谢谢。