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

谢谢。