你好,我正在构建一个简单的程序,只是为了学习asp webapi和blazor,我的post函数工作正常,它在postman上进行了测试,下面是我的代码供您观察:
[HttpPost]
[Route("addSingleProduct")]
public IActionResult Post([FromBody] ProductModel product)
{
try
{
if (product == null)
{
return BadRequest();
}
if (product != null)
{
_conn.Open();
string query = "INSERT INTO Product VALUES (@ProdName, @ProdPrice,@ProdDesc,@ProdImg,@CatgId,@ProdFam)";
using (Def.cmd = new SqlCommand(query,_conn))
{
Def.cmd.Parameters.AddWithValue("@ProdName", product.ProdName);
Def.cmd.Parameters.AddWithValue("@ProdPrice", product.ProdPrice);
Def.cmd.Parameters.AddWithValue("@ProdDesc", product.ProdDesc);
Def.cmd.Parameters.AddWithValue("@ProdImg", product.ProdImg);
Def.cmd.Parameters.AddWithValue("@CatgId", product.CatgId);
Def.cmd.Parameters.AddWithValue("@ProdFam", product.ProdFam);
//Def.cmd.ExecuteNonQuery();
int rowsAffected = Def.cmd.ExecuteNonQuery();
if (rowsAffected == 0)
{
_conn.Close();
return StatusCode(StatusCodes.Status500InternalServerError, "Failed to insert product");
}
}
_conn.Close();
}
return Ok();
}
catch(Exception ex)
{
_conn.Close();
Console.WriteLine(ex.Message);
return StatusCode(StatusCodes.Status500InternalServerError, "Failed to insert product");
}
}
在我的Blazor应用程序中,我正在等待响应,以便将值放置在布尔值中,以便我可以向用户显示产品已添加
@if(isadded==true){
<h1>Product was added</h1>
}else{
<h1>Product was not added</h1>
}
@code {
private bool isadded;
[Inject]
private GetProductsService productService { get; set; }
private ProductModel product = new ProductModel();
protected async Task<bool> AddNewProduct()
{
try
{
HttpResponseMessage response = await productService.AddProduct(product);
if (response.IsSuccessStatusCode)
{
isadded = true;
}
else
{
string responseContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"AddProduct failed with status code {response.StatusCode}: {responseContent}");
isadded = false;
}
return isadded;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
}
这里是我的服务,我在这里进行API调用
public async Task<HttpResponseMessage> AddProduct(ProductModel product)
{
return await _httpClient.PostAsJsonAsync("api/Product/AddSingleProduct", product);
}
代码运行平稳,模型被发送到API并插入数据库,但当它点击return ok()时,什么也没有发生,调试停止,所以我无法告诉用户产品已添加
1条答案
按热度按时间yvgpqqbh1#
问题似乎在于Blazor组件中的
isadded
布尔值没有正确更新。在你的代码中,你异步调用
AddNewProduct()
方法,但是你在调用它的时候并没有等待结果。这意味着在代码执行的时候isadded
的值可能没有更新,导致它总是显示“Product was not added”。要解决这个问题,您应该在调用AddNewProduct()方法时等待它:
在
GetProductsService
类中,您应该修改AddProduct()
方法以返回bool值而不是HttpResponseMessage:通过这样做,您将返回一个布尔值,指示产品是否已添加。
然后,在Blazor组件中,您可以更新
AddNewProduct()
方法以使用返回的布尔值:通过这些更改,
isadded
值应正确更新,并且UI应根据是否添加了产品显示正确的消息。