在ASP.NET Core MVC

时间:2019-06-10 09:26:19

标签: asp.net-mvc asp.net-core model-view-controller error-handling

我正在发现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

我想处理

2 个答案:

答案 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);
    }
}