如何向ASP.NET Core的Error错误视图传递scheduledWedding时间等自定义信息
实现方案
1. 扩展错误视图模型,新增婚礼时间字段
修改ErrorViewModel类,添加冲突的婚礼时间相关属性,兼容原有逻辑:
namespace LET.Panopto.Scheduler.Models { public class ErrorViewModel { public string RequestId { get; set; } public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); // 新增冲突婚礼时间属性,设为可空避免非婚礼相关错误出现默认值 public DateTime? ErrorEventStart { get; set; } public DateTime? ErrorEventEnd { get; set; } // 控制婚礼时间展示逻辑 public bool ShowWeddingErrorTime => ErrorEventStart.HasValue && ErrorEventEnd.HasValue; } }
2. 控制器返回错误视图时传入自定义数据
修改控制器中返回Error视图的逻辑,将触发异常的婚礼时间封装到模型中传递:
[HttpPost] public async Task<IActionResult> ScheduleWeddingEvents(DateTime start, DateTime end) { foreach(var scheduledWedding in EventScheduling.GenerateEvent(eventGroup)) { if(scheduledWedding.EventStart <= DateTime.Now || scheduledWedding.EventEnd <= DateTime.Now) { // 构造错误模型传入视图 return View("Error", new ErrorViewModel { RequestId = HttpContext.TraceIdentifier, ErrorEventStart = scheduledWedding.EventStart, ErrorEventEnd = scheduledWedding.EventEnd }); } if(scheduledWedding.EventStart > scheduledWedding.EventEnd) { return View("Error", new ErrorViewModel { RequestId = HttpContext.TraceIdentifier, ErrorEventStart = scheduledWedding.EventStart, ErrorEventEnd = scheduledWedding.EventEnd }); } result = EventMaker(result); } return View(result); }
3. 错误视图添加婚礼时间展示逻辑
修改Error.cshtml,添加对应字段的展示代码:
@model ErrorViewModel @{ ViewData["Title"] = "Error"; } <h1 class="text-danger">Error.</h1> <h2 class="text-danger">An error occurred while processing your request.</h2> @if (Model.ShowRequestId) { <p> <strong>Request ID:</strong> <code>@Model.RequestId</code> </p> } @* 新增冲突婚礼时间展示 *@ @if (Model.ShowWeddingErrorTime) { <p> <strong>冲突婚礼时间区间:</strong> <code>开始时间:@Model.ErrorEventStart.Value.ToString("yyyy-MM-dd HH:mm")</code> <code>结束时间:@Model.ErrorEventEnd.Value.ToString("yyyy-MM-dd HH:mm")</code> </p> } <h3>Development Mode</h3> <p> Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred. </p> <p> <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application. </p>
如果不需要对外暴露这个时间,也可以加环境判断,仅在开发环境展示该字段即可。
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

