我正在发现ASP.NET Core MVC,并且在第一个项目中。创建一个很棒的网上商店。
我目前想知道如何在控制器中实施错误的信息检查
假设有一个产品页面,每当用户单击产品时,他们都会点击下面的功能。
如您所见,该函数接受一个名为id的int参数,它将在数据库中搜索适合productId
的id,但是我想知道如何在此处添加错误检查?例如,如果数据库中不存在id
,请返回第XX页?
如果您不喜欢该功能,也可以随时为其提供建议。
我已经尝试过做一个简单的if and else语句
if(productvm == null)
{
then
return RedirectToPage("Index")
}
else
return View("ProductPage", productVm);
但它似乎没有命中if语句
[Route("ProductPage/{id}")]
public IActionResult ProductPage(int id)
{
Product product = _uow.Products.SelectProduct(id);
var stockViewModels = new List<StockViewModel>();
foreach (Stock stock in product.Stock)
{
stockViewModels.Add(new StockViewModel()
{
Id = stock.Id,
Description = stock.Description,
IsAvailable = stock.IsAvailable,
Quantity = stock.Quantity,
});
}
ProductViewModel productVm = new ProductViewModel
{
Name = product.Name,
Id = product.Id,
Description = product.Description,
Price = product.Price,
Stocks = stockViewModels,
};
if (productVm == null)
{
return RedirectToPage("Productslist");
}
else
{
return View("ProductPage", productVm);
}
}
如果在数据库中未找到ID,我基本上希望处理控制器时出错,然后执行XX
我测试功能的方法是在浏览具有数据库中不存在的ID的页面时更改ID
,然后出现此错误:
https://i.imgur.com/1amWx43.png
我想处理
答案 0 :(得分:2)
我认为您的问题是您在productVm
之前有一个新的if
对象,因此它永远不会为空,对于您的情况,应该检查产品对象而不是{{ 1}},例如:
productVm
答案 1 :(得分:0)
您不应在控制器中引发错误,但我建议您执行一些查询逻辑。您需要返回找不到状态码404。让抛出异常在您的服务中完成
public IActionResult ProductPage(int id)
{
Product product = _uow.Products.SelectProduct(id);
var stockViewModels = new List<StockViewModel>();
foreach (Stock stock in product.Stock)
{
stockViewModels.Add(new StockViewModel()
{
Id = stock.Id,
Description = stock.Description,
IsAvailable = stock.IsAvailable,
Quantity = stock.Quantity,
});
}
ProductViewModel productVm = new ProductViewModel
{
Name = product.Name,
Id = product.Id,
Description = product.Description,
Price = product.Price,
Stocks = stockViewModels,
};
if (productVm == null)
{
return NotFound();
}
else
{
return View("ProductPage", productVm);
}
}