在CustomException中更新消息

时间:2019-02-28 20:55:29

标签: c# asp.net-mvc exception-handling custom-exceptions

我有ASP MVC Web应用程序,并尝试设置错误日志记录,我试图在其中显示Web的UI友好消息并在需要的数据库中记录更多详细消息。我的应用程序可能不需要始终在DB中记录错误消息,但我想以某种方式设置“自定义异常”,以便它可以处理两种情况。

  1. 在DB中显示简短的UI友好消息和日志详细信息错误消息
  2. 在不登录数据库的情况下显示简短的UI友好消息。

这是我所拥有的: CustomException:如果传递了detailMessage,则获取新的guid,在DB中记录消息,并在shortMessage中连接guid值。

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方法来检查值,以使代码更干净,并且如果在Web层中阻止检查为老派,则无需执行此操作。

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

Web层代码:(请不要问为什么在这种情况下我不抛出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'的值,它将用'Reference ..'文本更新shortMessage。现在在Web代码中,每当发生错误时,ex.Message()的文本将不包含“ Reference ...”文本,而仅显示“ This is UI的短消息”而不是“ Reference#:[guid value] 。这是UI'的短消息。

有人知道为什么在Web层捕获错误时ex.Message不显示更新的文本吗?

0 个答案:

没有答案