我有ASP MVC Web应用程序,并尝试设置错误日志记录,我试图在其中显示Web的UI友好消息并在需要的数据库中记录更多详细消息。我的应用程序可能不需要始终在DB中记录错误消息,但我想以某种方式设置“自定义异常”,以便它可以处理两种情况。
这是我所拥有的: 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不显示更新的文本吗?