ASP.Net 5 MVC 6, как использовать общий Error.cshtml в качестве ответа об ошибке по умолчанию
ASP.Net 5 MVC 6, как использовать общий error.cshtml как ответ об ошибке по умолчанию
при использовании Microsoft.AspNet.Diagnostics UseExceptionHandler промежуточное ПО с видом бритвы
Если вы посмотрите пример кода на https://github.com/aspnet/Diagnostics/tree/dev/samples/ExceptionHandlerSample/Startup.cs
объясняя, как использовать Microsoft.AspNet.Diagnostics Средство ErrorHandler для ASP.Net 5, комментарий:
//Обычно вы используете MVC или аналогичный, чтобы сделать хорошую страницу.
Хорошо, но как это сделать?
public class Startup
{
public void Configure(IApplicationBuilder app)
{
// Configure the error handler to show an error page.
app.UseExceptionHandler(errorApp =>
{
// Normally you'd use MVC or similar to render a nice page.
errorApp.Run(async context =>
{
Ответы
Ответ 1
в классе запуска:
app.UseExceptionHandler("/Home/Error");
в HomeController:
public IActionResult Error()
{
var feature = this.HttpContext.Features.Get<IExceptionHandlerFeature>();
return View("~/Views/Shared/Error.cshtml", feature?.Error);
}
представление Error.cshtml может выглядеть так:
@model Exception
@{
ViewBag.Title = "Oops!";
}
<h1 class="text-danger">Oops! an error occurs</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model != null)
{
@Html.ValueFor(model => model.Message)
}
этот код является частью проекта, доступного на GitHub
Ответ 2
Чтобы обрабатывать 404 и внутренние ошибки, вам необходимо изменить подпись ошибки.
Я явно прокомментировал обработчики ошибок отладки в моей среде Dev в Startup.cs. Если вы не хотите этого делать, используйте переменную окружения в проекте.
Добавьте это в Startup.cs
if (env.IsDevelopment())
{
// Uncomment when done testing error handling
//app.UseBrowserLink();
//app.UseDeveloperExceptionPage();
//app.UseDatabaseErrorPage();
// Comment when done testing error handling
app.UseExceptionHandler("/Home/Error");
}
else
{
app.UseExceptionHandler("/Home/Error");
//For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
try
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
.Database.Migrate();
}
}
catch { }
}
// Lines Skipped For Brevity ....
// Add this line above app.Mvc in Startup.cs to Handle 404s etc
app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
Добавьте это в HomeController.cs
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Http.Features;
// id = Http Status Error
public IActionResult Error(String id)
{
var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var undhandledException = feature?.Error;
var iisError = id;
return View();
}