diff --git a/src/Hosting/Hosting/src/GenericHost/GenericWebHostedService.cs b/src/Hosting/Hosting/src/GenericHost/GenericWebHostedService.cs
index 5d7070fce860..89c6b4e94118 100644
--- a/src/Hosting/Hosting/src/GenericHost/GenericWebHostedService.cs
+++ b/src/Hosting/Hosting/src/GenericHost/GenericWebHostedService.cs
@@ -167,6 +167,7 @@ private RequestDelegate BuildErrorPageApplication(Exception exception)
.InformationalVersion;
model.ClrVersion = clrVersion;
model.OperatingSystemDescription = RuntimeInformation.OSDescription;
+ model.ShowRuntimeDetails = showDetailedErrors;
if (showDetailedErrors)
{
diff --git a/src/Hosting/Hosting/src/Internal/WebHost.cs b/src/Hosting/Hosting/src/Internal/WebHost.cs
index 504f1d28317b..6e976959e7f4 100644
--- a/src/Hosting/Hosting/src/Internal/WebHost.cs
+++ b/src/Hosting/Hosting/src/Internal/WebHost.cs
@@ -264,6 +264,7 @@ private RequestDelegate BuildApplication()
.InformationalVersion;
model.ClrVersion = clrVersion;
model.OperatingSystemDescription = RuntimeInformation.OSDescription;
+ model.ShowRuntimeDetails = showDetailedErrors;
if (showDetailedErrors)
{
diff --git a/src/Middleware/Diagnostics/Diagnostics.slnf b/src/Middleware/Diagnostics/Diagnostics.slnf
new file mode 100644
index 000000000000..54b140b7bb5f
--- /dev/null
+++ b/src/Middleware/Diagnostics/Diagnostics.slnf
@@ -0,0 +1,45 @@
+{
+ "solution": {
+ "path": "..\\Middleware.sln",
+ "projects": [
+ "..\\Hosting\\Abstractions\\src\\Microsoft.AspNetCore.Hosting.Abstractions.csproj",
+ "..\\Hosting\\Hosting\\src\\Microsoft.AspNetCore.Hosting.csproj",
+ "..\\Hosting\\Server.Abstractions\\src\\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj",
+ "..\\Hosting\\TestHost\\src\\Microsoft.AspNetCore.TestHost.csproj",
+ "..\\Http\\Authentication.Abstractions\\src\\Microsoft.AspNetCore.Authentication.Abstractions.csproj",
+ "..\\Http\\Authentication.Core\\src\\Microsoft.AspNetCore.Authentication.Core.csproj",
+ "..\\Http\\Http.Abstractions\\src\\Microsoft.AspNetCore.Http.Abstractions.csproj",
+ "..\\Http\\Http.Extensions\\src\\Microsoft.AspNetCore.Http.Extensions.csproj",
+ "..\\Http\\Http.Features\\src\\Microsoft.AspNetCore.Http.Features.csproj",
+ "..\\Http\\Metadata\\src\\Microsoft.AspNetCore.Metadata.csproj",
+ "..\\Http\\Routing.Abstractions\\src\\Microsoft.AspNetCore.Routing.Abstractions.csproj",
+ "..\\Http\\WebUtilities\\src\\Microsoft.AspNetCore.WebUtilities.csproj",
+ "..\\Security\\Authorization\\Core\\src\\Microsoft.AspNetCore.Authorization.csproj",
+ "..\\Servers\\Connections.Abstractions\\src\\Microsoft.AspNetCore.Connections.Abstractions.csproj",
+ "..\\Servers\\IIS\\IISIntegration\\src\\Microsoft.AspNetCore.Server.IISIntegration.csproj",
+ "..\\Servers\\Kestrel\\Core\\src\\Microsoft.AspNetCore.Server.Kestrel.Core.csproj",
+ "..\\Servers\\Kestrel\\Kestrel\\src\\Microsoft.AspNetCore.Server.Kestrel.csproj",
+ "..\\Servers\\Kestrel\\Transport.Sockets\\src\\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj",
+ "..\\http\\Headers\\src\\Microsoft.Net.Http.Headers.csproj",
+ "..\\http\\Routing\\src\\Microsoft.AspNetCore.Routing.csproj",
+ "..\\http\\http\\src\\Microsoft.AspNetCore.Http.csproj",
+ "Diagnostics.Abstractions\\src\\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj",
+ "Diagnostics.EntityFrameworkCore\\src\\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj",
+ "Diagnostics.EntityFrameworkCore\\test\\FunctionalTests\\Diagnostics.EFCore.FunctionalTests.csproj",
+ "Diagnostics.EntityFrameworkCore\\test\\UnitTests\\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests.csproj",
+ "Diagnostics\\src\\Microsoft.AspNetCore.Diagnostics.csproj",
+ "Diagnostics\\test\\FunctionalTests\\Diagnostics.FunctionalTests.csproj",
+ "Diagnostics\\test\\UnitTests\\Microsoft.AspNetCore.Diagnostics.Tests.csproj",
+ "Diagnostics\\test\\testassets\\ClassLibraryWithPortablePdbs\\ClassLibraryWithPortablePdbs.csproj",
+ "Diagnostics\\test\\testassets\\DatabaseErrorPageSample\\DatabaseErrorPageSample.csproj",
+ "Diagnostics\\test\\testassets\\DeveloperExceptionPageSample\\DeveloperExceptionPageSample.csproj",
+ "Diagnostics\\test\\testassets\\ExceptionHandlerSample\\ExceptionHandlerSample.csproj",
+ "Diagnostics\\test\\testassets\\StatusCodePagesSample\\StatusCodePagesSample.csproj",
+ "Diagnostics\\test\\testassets\\WelcomePageSample\\WelcomePageSample.csproj",
+ "HttpOverrides\\src\\Microsoft.AspNetCore.HttpOverrides.csproj",
+ "MiddlewareAnalysis\\samples\\MiddlewareAnalysisSample\\MiddlewareAnalysisSample.csproj",
+ "MiddlewareAnalysis\\src\\Microsoft.AspNetCore.MiddlewareAnalysis.csproj",
+ "StaticFiles\\src\\Microsoft.AspNetCore.StaticFiles.csproj"
+ ]
+ }
+}
diff --git a/src/Servers/IIS/IIS/src/StartupHook.cs b/src/Servers/IIS/IIS/src/StartupHook.cs
index 436a1cd079c6..5f8f3edf5a53 100644
--- a/src/Servers/IIS/IIS/src/StartupHook.cs
+++ b/src/Servers/IIS/IIS/src/StartupHook.cs
@@ -83,7 +83,10 @@ public static void Initialize()
new PhysicalFileProvider(contentRoot),
sourceCodeLineCount: 6);
+ // The startup hook is only present when detailed errors are allowed, so
+ // we can turn on all the details.
model.ErrorDetails = exceptionDetailProvider.GetDetails(exception);
+ model.ShowRuntimeDetails = true;
var errorPage = new ErrorPage(model);
diff --git a/src/Shared/ErrorPage/ErrorPage.Designer.cs b/src/Shared/ErrorPage/ErrorPage.Designer.cs
index 4cfcd48f6bfb..402e3ad49478 100644
--- a/src/Shared/ErrorPage/ErrorPage.Designer.cs
+++ b/src/Shared/ErrorPage/ErrorPage.Designer.cs
@@ -1,87 +1,79 @@
+//
+#pragma warning disable 1591
namespace Microsoft.AspNetCore.Hosting.Views
{
+ #line hidden
+ using System.Threading.Tasks;
+#nullable restore
#line 1 "ErrorPage.cshtml"
-using System
+using System;
#line default
#line hidden
- ;
+#nullable disable
+#nullable restore
#line 2 "ErrorPage.cshtml"
-using System.Globalization
+using System.Globalization;
#line default
#line hidden
- ;
+#nullable disable
+#nullable restore
#line 3 "ErrorPage.cshtml"
-using System.Linq
+using System.Linq;
#line default
#line hidden
- ;
+#nullable disable
+#nullable restore
#line 4 "ErrorPage.cshtml"
-using System.Net
+using System.Net;
#line default
#line hidden
- ;
+#nullable disable
+#nullable restore
#line 5 "ErrorPage.cshtml"
-using System.Reflection
+using System.Reflection;
#line default
#line hidden
- ;
+#nullable disable
+#nullable restore
#line 6 "ErrorPage.cshtml"
-using Microsoft.AspNetCore.Hosting.Views
+using Microsoft.AspNetCore.Hosting.Views;
#line default
#line hidden
- ;
- using System.Threading.Tasks;
-
+#nullable disable
internal class ErrorPage : Microsoft.Extensions.RazorViews.BaseView
{
-#line 9 "ErrorPage.cshtml"
-
- public ErrorPage(ErrorPageModel model)
- {
- Model = model;
- }
-
- public ErrorPageModel Model { get; set; }
-
-#line default
-#line hidden
- #line hidden
- public ErrorPage()
- {
- }
-
#pragma warning disable 1998
- public override async Task ExecuteAsync()
+ public async override global::System.Threading.Tasks.Task ExecuteAsync()
{
WriteLiteral("\r\n");
+#nullable restore
#line 17 "ErrorPage.cshtml"
-
+
var location = string.Empty;
#line default
#line hidden
-
+#nullable disable
WriteLiteral("\r\n\r\n
\r\n \r\n ");
-#line 25 "ErrorPage.cshtml"
- Write("Internal Server Error");
-
-#line default
-#line hidden
- WriteLiteral(@"
+ WriteLiteral(@" xmlns=""http://www.w3.org/1999/xhtml"">
+
+
+ Internal Server Error
- ");
+ An error occurred while starting the application.
+");
+#nullable restore
#line 226 "ErrorPage.cshtml"
- Write("An error occurred while starting the application.");
-
-#line default
-#line hidden
- WriteLiteral("
\r\n");
-#line 227 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 227 "ErrorPage.cshtml"
foreach (var errorDetail in Model.ErrorDetails)
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" ");
-#line 229 "ErrorPage.cshtml"
+#nullable restore
+#line 228 "ErrorPage.cshtml"
Write(errorDetail.Error.GetType().Name);
#line default
#line hidden
+#nullable disable
WriteLiteral(": ");
-#line 229 "ErrorPage.cshtml"
- Output.Write(HtmlEncodeAndReplaceLineBreaks(errorDetail.Error.Message));
+#nullable restore
+#line 228 "ErrorPage.cshtml"
+ Output.Write(HtmlEncodeAndReplaceLineBreaks(errorDetail.Error.Message));
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 230 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 230 "ErrorPage.cshtml"
-
- var firstFrame = errorDetail.StackFrames.FirstOrDefault();
- if (firstFrame != null)
- {
- location = firstFrame.Function;
- }
-
-
-#line default
-#line hidden
-
-#line 236 "ErrorPage.cshtml"
+#nullable restore
+#line 229 "ErrorPage.cshtml"
+ var firstFrame = errorDetail.StackFrames.FirstOrDefault();
+ if (firstFrame != null)
+ {
+ location = firstFrame.Function;
+ }
if (!string.IsNullOrEmpty(location) && firstFrame != null && !string.IsNullOrEmpty(firstFrame.File))
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" ");
-#line 239 "ErrorPage.cshtml"
+#nullable restore
+#line 237 "ErrorPage.cshtml"
Write(location);
#line default
#line hidden
+#nullable disable
WriteLiteral(" in ");
-#line 239 "ErrorPage.cshtml"
+#nullable restore
+#line 237 "ErrorPage.cshtml"
Write(System.IO.Path.GetFileName(firstFrame.File));
#line default
#line hidden
+#nullable disable
WriteLiteral(", line ");
-#line 239 "ErrorPage.cshtml"
+#nullable restore
+#line 237 "ErrorPage.cshtml"
Write(firstFrame.Line);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 240 "ErrorPage.cshtml"
+#nullable restore
+#line 238 "ErrorPage.cshtml"
}
else if (!string.IsNullOrEmpty(location))
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" ");
-#line 243 "ErrorPage.cshtml"
+#nullable restore
+#line 241 "ErrorPage.cshtml"
Write(location);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 244 "ErrorPage.cshtml"
+#nullable restore
+#line 242 "ErrorPage.cshtml"
}
else
{
#line default
#line hidden
-
- WriteLiteral(" ");
-#line 247 "ErrorPage.cshtml"
- Write("Unknown location");
-
-#line default
-#line hidden
- WriteLiteral("
\r\n");
-#line 248 "ErrorPage.cshtml"
+#nullable disable
+ WriteLiteral(" Unknown location
\r\n");
+#nullable restore
+#line 246 "ErrorPage.cshtml"
}
var reflectionTypeLoadException = errorDetail.Error as ReflectionTypeLoadException;
@@ -413,372 +393,335 @@ .page .length {
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" Loader Exceptions:
\r\n \r\n");
-#line 257 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 257 "ErrorPage.cshtml"
+#nullable restore
+#line 255 "ErrorPage.cshtml"
foreach (var ex in reflectionTypeLoadException.LoaderExceptions)
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" - ");
-#line 259 "ErrorPage.cshtml"
+#nullable restore
+#line 257 "ErrorPage.cshtml"
Write(ex.Message);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 260 "ErrorPage.cshtml"
+#nullable restore
+#line 258 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 262 "ErrorPage.cshtml"
+#nullable restore
+#line 260 "ErrorPage.cshtml"
}
}
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" \r\n
\r\n");
-#line 267 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 267 "ErrorPage.cshtml"
-
+#nullable restore
+#line 265 "ErrorPage.cshtml"
+
var exceptionCount = 0;
var stackFrameCount = 0;
var exceptionDetailId = "";
var frameId = "";
-
+
#line default
#line hidden
-
- WriteLiteral(" ");
-#line 273 "ErrorPage.cshtml"
+#nullable disable
+#nullable restore
+#line 271 "ErrorPage.cshtml"
foreach (var errorDetail in Model.ErrorDetails)
{
-
-
-#line default
-#line hidden
-
-#line 275 "ErrorPage.cshtml"
-
- exceptionCount++;
- exceptionDetailId = "exceptionDetail" + exceptionCount;
-
-
-#line default
-#line hidden
-
-#line 278 "ErrorPage.cshtml"
-
+ exceptionCount++;
+ exceptionDetailId = "exceptionDetail" + exceptionCount;
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" - \r\n
");
-#line 280 "ErrorPage.cshtml"
+#nullable restore
+#line 276 "ErrorPage.cshtml"
Write(errorDetail.Error.GetType().Name);
#line default
#line hidden
+#nullable disable
WriteLiteral(": ");
-#line 280 "ErrorPage.cshtml"
+#nullable restore
+#line 276 "ErrorPage.cshtml"
Write(errorDetail.Error.Message);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n \r\n");
-#line 282 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 282 "ErrorPage.cshtml"
+#nullable restore
+#line 278 "ErrorPage.cshtml"
foreach (var frame in errorDetail.StackFrames)
{
-
-
-#line default
-#line hidden
-
-#line 284 "ErrorPage.cshtml"
-
- stackFrameCount++;
- frameId = "frame" + stackFrameCount;
-
-
-#line default
-#line hidden
-
-#line 287 "ErrorPage.cshtml"
-
+ stackFrameCount++;
+ frameId = "frame" + stackFrameCount;
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" - \r\n");
-#line 289 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 289 "ErrorPage.cshtml"
+#nullable restore
+#line 283 "ErrorPage.cshtml"
if (string.IsNullOrEmpty(frame.File))
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
");
-#line 291 "ErrorPage.cshtml"
+#nullable restore
+#line 285 "ErrorPage.cshtml"
Write(frame.Function);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 292 "ErrorPage.cshtml"
+#nullable restore
+#line 286 "ErrorPage.cshtml"
}
else
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" ");
-#line 295 "ErrorPage.cshtml"
+#nullable restore
+#line 289 "ErrorPage.cshtml"
Write(frame.Function);
#line default
#line hidden
+#nullable disable
WriteLiteral(" in ");
-#line 295 "ErrorPage.cshtml"
+#nullable restore
+#line 289 "ErrorPage.cshtml"
Write(System.IO.Path.GetFileName(frame.File));
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 296 "ErrorPage.cshtml"
+#nullable restore
+#line 290 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("\r\n");
-#line 298 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 298 "ErrorPage.cshtml"
+#nullable restore
+#line 292 "ErrorPage.cshtml"
if (frame.Line != 0 && frame.ContextCode.Any())
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" \r\n \r\n");
-#line 302 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 302 "ErrorPage.cshtml"
+#nullable restore
+#line 296 "ErrorPage.cshtml"
if (frame.PreContextCode.Any())
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 305 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 305 "ErrorPage.cshtml"
+#nullable restore
+#line 299 "ErrorPage.cshtml"
foreach (var line in frame.PreContextCode)
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" - ");
-#line 307 "ErrorPage.cshtml"
+#nullable restore
+#line 301 "ErrorPage.cshtml"
Write(line);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 308 "ErrorPage.cshtml"
+#nullable restore
+#line 302 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 310 "ErrorPage.cshtml"
+#nullable restore
+#line 304 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("\r\n
\r\n");
-#line 313 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 313 "ErrorPage.cshtml"
+#nullable restore
+#line 307 "ErrorPage.cshtml"
foreach (var line in frame.ContextCode)
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" - ");
-#line 315 "ErrorPage.cshtml"
+#nullable restore
+#line 309 "ErrorPage.cshtml"
Write(line);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 316 "ErrorPage.cshtml"
+#nullable restore
+#line 310 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n\r\n");
-#line 319 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 319 "ErrorPage.cshtml"
+#nullable restore
+#line 313 "ErrorPage.cshtml"
if (frame.PostContextCode.Any())
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 322 "ErrorPage.cshtml"
-
-
-#line default
-#line hidden
-
-#line 322 "ErrorPage.cshtml"
+#nullable restore
+#line 316 "ErrorPage.cshtml"
foreach (var line in frame.PostContextCode)
{
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" - ");
-#line 324 "ErrorPage.cshtml"
+#nullable restore
+#line 318 "ErrorPage.cshtml"
Write(line);
#line default
#line hidden
+#nullable disable
WriteLiteral("
\r\n");
-#line 325 "ErrorPage.cshtml"
+#nullable restore
+#line 319 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 327 "ErrorPage.cshtml"
+#nullable restore
+#line 321 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral("
\r\n");
-#line 329 "ErrorPage.cshtml"
+#nullable restore
+#line 323 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral(" \r\n");
-#line 331 "ErrorPage.cshtml"
+#nullable restore
+#line 325 "ErrorPage.cshtml"
}
#line default
#line hidden
-
+#nullable disable
WriteLiteral(@"
-
@@ -786,65 +729,96 @@ .page .length {
\r\n
\r\n
\r\n
");
-#line 341 "ErrorPage.cshtml"
+#nullable restore
+#line 335 "ErrorPage.cshtml"
Write(errorDetail.Error.ToString());
#line default
#line hidden
+#nullable disable
WriteLiteral("\r\n
\r\n
\r\n \r\n");
-#line 345 "ErrorPage.cshtml"
+#nullable restore
+#line 339 "ErrorPage.cshtml"
}
#line default
#line hidden
+#nullable disable
+ WriteLiteral("
\r\n
\r\n");
+#nullable restore
+#line 342 "ErrorPage.cshtml"
+ if (Model.ShowRuntimeDetails) {
- WriteLiteral(" \r\n \r\n