();
+
+ if (!controller.ModelState.IsValid)
+ {
+ foreach (var modelState in controller.ModelState.Values)
+ {
+ foreach (var error in modelState.Errors)
+ {
+ logger.LogError("ModelState error: {0}", error.ErrorMessage);
+ foreach (var key in controller.ModelState.Keys)
+ {
+ logger.LogError("ModelState key: {0}", key);
+ dictionary.Add(key,
+ string.Join("\n",
+ controller.ModelState[key].Errors.Select( e => e.ErrorMessage).ToArray()));
+ }
+ }
+ }
+ }
+
+ if (controller.HttpContext.Request.Headers.ContainsKey("Accept")
+ && controller.HttpContext.Request.Headers["Accept"].ToString().Contains("application/json"))
+ {
+ return controller.Json(new
+ {
+ RequestId = controller.HttpContext.TraceIdentifier,
+ Description = message,
+ ModelErrors = dictionary
+ });
+ }
+
+ return controller.View("Error",
+ new ErrorViewModel
+ {
+ RequestId = controller.HttpContext.TraceIdentifier,
+ Description = message,
+ ModelErrors = dictionary
+ }
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/Yavsc.Org/Views/Shared/Error.cshtml b/src/Yavsc.Org/Views/Shared/Error.cshtml
index ed29d328..49c7539f 100644
--- a/src/Yavsc.Org/Views/Shared/Error.cshtml
+++ b/src/Yavsc.Org/Views/Shared/Error.cshtml
@@ -1,14 +1,41 @@
-@model ErrorViewModel
+@using Microsoft.AspNetCore.Hosting
+@using Yavsc.Models
+@inject IWebHostEnvironment Env
+@model object
@{
ViewBag.Title = "Error";
}
Error.
-An error occurred while processing your request.
-@if (Model!=null) if (Model.ShowRequestId)
+@if (Env.IsDevelopment())
{
-
- Request ID: @Model.RequestId
-
+ An unhandled exception occurred while processing your request.
+ if (Model is Exception exception)
+ {
+ @exception.ToString()
+ }
+ else if (Model is ErrorViewModel errorViewModel && !string.IsNullOrWhiteSpace(errorViewModel.Description))
+ {
+ @errorViewModel.Description
+ }
+}
+else
+{
+ An error occurred while processing your request.
+
+ if (Model is ErrorViewModel errorViewModel)
+ {
+ if (errorViewModel.ShowRequestId)
+ {
+
+ Request ID: @errorViewModel.RequestId
+
+ }
+
+ if (!string.IsNullOrWhiteSpace(errorViewModel.Description))
+ {
+ @errorViewModel.Description
+ }
+ }
}
diff --git a/src/Yavsc.Server/Models/ErrorViewModel.cs b/src/Yavsc.Server/Models/ErrorViewModel.cs
index 1b779ead..17819476 100644
--- a/src/Yavsc.Server/Models/ErrorViewModel.cs
+++ b/src/Yavsc.Server/Models/ErrorViewModel.cs
@@ -7,4 +7,5 @@ public class ErrorViewModel
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+ public Dictionary ModelErrors { get; set; }
}