Проверка ошибок в контроллере в ASP.NET Core MVC - PullRequest
0 голосов
/ 10 июня 2019

Я открываю ASP.NET Core MVC и начинаю свой первый проект. Создание крутого интернет магазина.

Мне сейчас интересно, как реализовать проверку неверной информации, например, в контроллере

Скажем, есть страница продукта, когда пользователи нажимают на продукт, они нажимают на функцию ниже.

Как вы видите, функция принимает параметр int с именем id, она будет искать в базе данных идентификатор, соответствующий productId, но мне интересно, как мне добавить проверку ошибок здесь? Как, например, если id не существует в базе данных, вернитесь на страницу XX?

Также не стесняйтесь давать советы функции, если она вам не нравится.

Я уже пытался сделать простое утверждение if и 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);
    }
}

Я в основном хочу обработать ошибку контроллера, если идентификатор не найден в базе данных, затем выполнить XX

Способ проверки функции заключается в изменении ID при просмотре страницы с идентификатором, которого нет в базе данных, затем я получаю эту ошибку:

https://i.imgur.com/1amWx43.png

и я хочу справиться с этим

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Я думаю, что ваша проблема в том, что у вас есть новый объект productVm перед if, поэтому он никогда не будет нулевым, в вашем случае вы должны проверить объект продукта, а не productVm, например:

    Product product = _uow.Products.SelectProduct(id);

    if (product == null)
    {
        return RedirectToPage("Productslist");
    }
    else
    {
        return View("ProductPage", productVm);
    }
0 голосов
/ 10 июня 2019

Вы не должны выдавать ошибку в вашем контроллере, но я бы посоветовал вам выполнить некоторую логику запроса, подобную этой. вам нужно вернуть не найденный код состояния 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...