Я прочитал ( здесь ), что не стоит делать блоки Try / Catch и избегать исключений в настройках Web API. Однако, если вы хотите отлавливать и регистрировать ошибки, возникающие в вашем приложении ... не будет ли попытка / уловка лучшим способом решить эту проблему? Вот пример того, что я сделал в своем приложении - мне любопытно, есть ли у кого-нибудь лучший способ. Мой класс ErrorHander
сохраняет ошибку в базе данных и отправляет администраторам сообщения об ошибке.
Контроллер
namespace MyApp.Controllers
{
[Route("api/[controller]")]
public class AuthController : Controller
{
private readonly IAuthRepository _repo;
private readonly IErrorHandler _errorHandler;
private AuthController(IAuthRepository repo, IErrorHandler errorHandler) {
_errorHandler = errorHandler;
}
[Authorize]
[HttpPut("changePassword")]
public async Task<IActionResult> ChangePassword(
[FromBody] UserForChangePasswordDto userForChangePasswordDto)
{
var userFromRepo = await _repo.Login(userForChangePasswordDto.Username,
userForChangePasswordDto.OldPassword, null);
try
{
//logic to update user's password and return updated user
return Ok(new { tokenString, user });
}
catch (Exception ex)
{
// emails error to Admin, saves it to DB, then returns HttpStatusCode
return await _errorHandler.HandleError(
HttpStatusCode.InternalServerError, Request, new Error
{
Message = ex.Message,
StackTrace = ex.StackTrace,
User = userFromRepo != null ? userFromRepo.Username : "Invalid User"
});
}
}
}
}