Когда я должен бросить исключение в зависимости от возврата ошибки ActionResult в проекте ASP.NET Core Web API?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Когда я должен бросить исключение в зависимости от возврата ошибки ActionResult в проекте ASP.NET Core Web API?

Сообщение Anonymous »

Я делаю проект ASP.net Core Web API с контроллерами. Все контроллеры API вытекают из ControllerBase , который имеет метод NotFound (). Я использую этот метод из контроллеров всякий раз, когда не могу найти ресурс, который запросил клиент. Однако иногда я хочу инкапсулировать всю логику из действия контроллера в отдельную службу. В этом случае я не могу использовать метод notfound () напрямую. Это найдено. Затем в глобальном обработчике исключений я могу обработать это исключение и вернуть код состояния 404 клиенту. Метод обслуживания, который я могу вернуть новую notfoundobjectresult () (точно так же, как controllerbase.notfound () ) вместо того, чтобы бросать метод исключения? H3>
Что заставляет мой разум щекотать, это решение, которое мне нужно принять, и компромисс, который он приносит. Если я решу, что сервис будет выбрасывать исключение, которое делает код чище, потому что сервис не зависит от абстракций основных абстракций ASP.NET, таких как iActionResult и NotFoundObjectResult . Тем не менее, метание исключения - это дорогостоящая операция, и серверу требуется больше времени, чтобы обработать его, чем простой объект возвращает.
С другой Операция, она делает вещи быстрее в случае ошибки, но она объединяет службу с типами ядра ASP.NET. Используйте.

Код: Выделить всё

[Route("api/users")]
[ApiController]
public class UsersController : ControllerBase
{
// ... unimportant code

[HttpDelete("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task DeleteUser([Required] string id)
{
if (!ModelState.IsValid)
{
return BadRequest();
}

await userManagementService.DeleteUser(id); // all logic inside this service method

return NoContent();
}
}

, где пользователь Managementservice :

Код: Выделить всё

public class UserManagementService : IUserManagementService
{
// ... unimportant code
public Task DeleteUser(string id)
{
var user = await _dbContext.Users.FindAsync(id);
if (user == null)
{
throw new MyNotFoundException($"User with id: {id} not found");
}

// ... code that deletes the user and cleanups all resources associated
// with it (eg. things not just in the db but also user files on the content server)
}
}

< /code>
 подход с возвращением iActionResult < /h3>
[Route("api/users")]
[ApiController]
public class UsersController : ControllerBase
{
// ... unimportant code

[HttpDelete("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task DeleteUser([Required] string id)
{
if (!ModelState.IsValid)
{
return BadRequest();
}

return await userManagementService.DeleteUser(id); // all logic inside this service method
}
}

, где пользователь Managementservice :

Код: Выделить всё

public class UserManagementService : IUserManagementService
{
// ... unimportant code
public Task DeleteUser(string id)
{
var user = await _dbContext.Users.FindAsync(id);
if (user == null)
{
return new NotFoundObjectResult($"User with id: {id} not found");
}

// ... code that deletes the user and cleanups all resources associated
// with it (eg. things not just in the db but also user files on the content server)

// ... success
new NoContentResult();
}
}

должен пользователь managementservice.deleteUser () метод возврат iActionResult

Подробнее здесь: https://stackoverflow.com/questions/766 ... t-core-web
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Объект шаблона ошибки из базы данных Clickhouse в проекте ASP.NET Core Web API
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Объект шаблона ошибки из базы данных Clickhouse в проекте ASP.NET Core Web API
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Почему мой цикл C# в ASP.NET MVC 5 ActionResult выдает это сообщение об ошибке
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»