Обновление сообщения в CustomException - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть веб-приложение ASP MVC, и я пытаюсь настроить ведение журнала ошибок, в котором я пытаюсь отобразить дружественное пользовательскому интерфейсу сообщение для веб-сайта и записать более подробное сообщение в нужную базу данных.Моему приложению может не потребоваться всегда регистрировать сообщение об ошибке в БД, но я хотел настроить Custom Exception таким образом, чтобы он обрабатывал оба сценария.

  1. Показать короткое дружественное пользовательскому интерфейсу сообщение и подробное сообщение об ошибке журнала в БД
  2. Показать короткое дружественное к интерфейсу сообщение без входа в БД.

Вот что у меня есть: CustomException: если detailMessage пройден, получить новый guid, зарегистрировать сообщение в БД и объединить значение guidin shortMessage.

public class CustomException : Exception
{
    public CustomException(string message) : base(message)
    {
    }

    public CustomException(string shortMessage, string detailMessage = "") : base(shortMessage)
    {
        if (!string.IsNullOrWhiteSpace(detailMessage))
        {          
            string loggingId = Guid.NewGuid().ToString();
            //code to log in DB with detail message
            shortMessage = $"Reference# : {loggingId}. {shortMessage}";
        }
    }        
}

ThrowIf Helper Метод для проверки значения, чтобы код был чище, и мне не нужно этого делать, если проверка блока выполняется как старая школа в веб-слое.

public static class ThrowIf
{
    public static void IsZeroOrNegative(int argument, string shortMessage, string detailMessage = "")
    {
        if (argument <= 0)
        {
            throw new CustomException(shortMessage, detailMessage);         
        }
    }

    public static void IsNull(object argument, string shortMessage, string detailMessage = "")
    {
        if (argument == null)
        {
            throw CustomException.LogMessage(shortMessage, detailMessage);
        }
    }
}

Код веб-слоя: (Пожалуйста, не спрашивайте, почему я не выкидываю ArgumentException и не использую свое собственное CustomException в этом сценарии)

public ActionResult GetEmployee(int employeeId)
{
    var responseViewModel = new EmployeeModel();
    try
    {
        ThrowIf.IsZeroOrNegative(employeeId, shortMessage: "This is short message for UI.", detailMessage: "This is detail message for DB");
    }
    catch(CustomException ex)
    {
        ViewBag.Error = ex.Message();
    }
    return View(responseViewModel);
}

Проблема: как вы можете видеть в моем коде CustomException, если я передамзначение для 'detailMessage', оно обновляет shortMessage с текстом 'Reference ..'.Теперь в веб-коде всякий раз, когда возникает ошибка, текст для ex.Message () не содержит текст «Ссылка ...» и показывает только «Это короткое сообщение для пользовательского интерфейса» вместо «Ссылка №: [значение guid],Это короткое сообщение для пользовательского интерфейса.

Кто-нибудь знает, почему ex.Message не отображает обновленный текст, когда ошибка обнаруживается в веб-слое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...