\r\n");
+#line 232 "CompilationErrorPage.cshtml"
+
+ var stackFrameCount = 0;
+ var frameId = "";
+ var fileName = errorDetail.StackFrames.FirstOrDefault()?.File;
+ if (!string.IsNullOrEmpty(fileName))
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
");
+#line 238 "CompilationErrorPage.cshtml"
+ Write(fileName);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 239 "CompilationErrorPage.cshtml"
+ }
+
+
+#line default
+#line hidden
+ WriteLiteral(" ");
+#line 241 "CompilationErrorPage.cshtml"
+ if (!string.IsNullOrEmpty(errorDetail.ErrorMessage))
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
");
+#line 243 "CompilationErrorPage.cshtml"
+ Write(errorDetail.ErrorMessage);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 244 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n
\r\n");
+#line 247 "CompilationErrorPage.cshtml"
+ foreach (var frame in errorDetail.StackFrames)
+ {
+ stackFrameCount++;
+ frameId = "frame" + stackFrameCount;
+
+
+#line default
+#line hidden
+ WriteLiteral(" - \r\n");
+#line 253 "CompilationErrorPage.cshtml"
+ if (!string.IsNullOrEmpty(frame.ErrorDetails))
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
");
+#line 255 "CompilationErrorPage.cshtml"
+ Write(frame.ErrorDetails);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 256 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("\r\n");
+#line 258 "CompilationErrorPage.cshtml"
+ if (frame.Line != 0 && frame.ContextCode.Any())
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n \r\n");
+#line 262 "CompilationErrorPage.cshtml"
+ if (frame.PreContextCode.Any())
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 265 "CompilationErrorPage.cshtml"
+ foreach (var line in frame.PreContextCode)
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" - ");
+#line 267 "CompilationErrorPage.cshtml"
+ Write(line);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 268 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 270 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 272 "CompilationErrorPage.cshtml"
+ foreach (var line in frame.ContextCode)
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" - ");
+#line 274 "CompilationErrorPage.cshtml"
+ Write(line);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 275 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 277 "CompilationErrorPage.cshtml"
+ if (frame.PostContextCode.Any())
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 280 "CompilationErrorPage.cshtml"
+ foreach (var line in frame.PostContextCode)
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" - ");
+#line 282 "CompilationErrorPage.cshtml"
+ Write(line);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 283 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 285 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 287 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n");
+#line 289 "CompilationErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n
\r\n
\r\n");
+#line 293 "CompilationErrorPage.cshtml"
+ if (!string.IsNullOrEmpty(Model.CompiledContent[i]))
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
+ @{
+ var stackFrameCount = 0;
+ var frameId = "";
+ var fileName = errorDetail.StackFrames.FirstOrDefault()?.File;
+ if (!string.IsNullOrEmpty(fileName))
+ {
+
@fileName
+ }
+ }
+ @if (!string.IsNullOrEmpty(errorDetail.ErrorMessage))
+ {
+
@errorDetail.ErrorMessage
+ }
+
+
+ @foreach (var frame in errorDetail.StackFrames)
+ {
+ stackFrameCount++;
+ frameId = "frame" + stackFrameCount;
+
+ -
+ @if (!string.IsNullOrEmpty(frame.ErrorDetails))
+ {
+
@frame.ErrorDetails
+ }
+
+ @if (frame.Line != 0 && frame.ContextCode.Any())
+ {
+
+
+ @if (frame.PreContextCode.Any())
+ {
+
+ @foreach (var line in frame.PreContextCode)
+ {
+ - @line
+ }
+
+ }
+
+ @foreach (var line in frame.ContextCode)
+ {
+ - @line
+ }
+
+ @if (frame.PostContextCode.Any())
+ {
+
+ @foreach (var line in frame.PostContextCode)
+ {
+ - @line
+ }
+
+ }
+
+ }
+
+ }
+
+
+
+ @if (!string.IsNullOrEmpty(Model.CompiledContent[i]))
+ {
+ ");
+#line 231 "ErrorPage.cshtml"
+ Write(errorDetail.Error.GetType().Name);
+
+#line default
+#line hidden
+ WriteLiteral(": ");
+#line 231 "ErrorPage.cshtml"
+ Output.Write(HtmlEncodeAndReplaceLineBreaks(errorDetail.Error.Message));
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 232 "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
+ WriteLiteral(" ");
+#line 240 "ErrorPage.cshtml"
+ Write(location);
+
+#line default
+#line hidden
+ WriteLiteral(" in ");
+#line 240 "ErrorPage.cshtml"
+ Write(System.IO.Path.GetFileName(firstFrame.File));
+
+#line default
+#line hidden
+ WriteLiteral(", line ");
+#line 240 "ErrorPage.cshtml"
+ Write(firstFrame.Line);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 241 "ErrorPage.cshtml"
+ }
+ else if (!string.IsNullOrEmpty(location))
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" ");
+#line 244 "ErrorPage.cshtml"
+ Write(location);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 245 "ErrorPage.cshtml"
+ }
+ else
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" ");
+#line 248 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_UnknownLocation);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 249 "ErrorPage.cshtml"
+ }
+
+ var reflectionTypeLoadException = errorDetail.Error as ReflectionTypeLoadException;
+ if (reflectionTypeLoadException != null)
+ {
+ if (reflectionTypeLoadException.LoaderExceptions.Length > 0)
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n");
+#line 364 "ErrorPage.cshtml"
+ if (Model.Query.Any())
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n \r\n \r\n | ");
+#line 369 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_VariableColumn);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n ");
+#line 370 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_ValueColumn);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n
\r\n \r\n \r\n");
+#line 374 "ErrorPage.cshtml"
+ foreach (var kv in Model.Query.OrderBy(kv => kv.Key))
+ {
+ foreach (var v in kv.Value)
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n | ");
+#line 379 "ErrorPage.cshtml"
+ Write(kv.Key);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n ");
+#line 380 "ErrorPage.cshtml"
+ Write(v);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n
\r\n");
+#line 382 "ErrorPage.cshtml"
+ }
+ }
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n
\r\n");
+#line 386 "ErrorPage.cshtml"
+ }
+ else
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
");
+#line 389 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_NoQueryStringData);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 390 "ErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n\r\n \r\n");
+#line 394 "ErrorPage.cshtml"
+ if (Model.Cookies.Any())
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n \r\n \r\n | ");
+#line 399 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_VariableColumn);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n ");
+#line 400 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_ValueColumn);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n
\r\n \r\n \r\n");
+#line 404 "ErrorPage.cshtml"
+ foreach (var kv in Model.Cookies.OrderBy(kv => kv.Key))
+ {
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n | ");
+#line 407 "ErrorPage.cshtml"
+ Write(kv.Key);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n ");
+#line 408 "ErrorPage.cshtml"
+ Write(kv.Value);
+
+#line default
+#line hidden
+ WriteLiteral(" | \r\n
\r\n");
+#line 410 "ErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral(" \r\n
\r\n");
+#line 413 "ErrorPage.cshtml"
+ }
+ else
+ {
+
+#line default
+#line hidden
+ WriteLiteral("
");
+#line 416 "ErrorPage.cshtml"
+ Write(Resources.ErrorPageHtml_NoCookieData);
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n");
+#line 417 "ErrorPage.cshtml"
+ }
+
+#line default
+#line hidden
+ WriteLiteral("
\r\n
+
+
+
+");
+ }
+ #pragma warning restore 1998
+#line 9 "ErrorPage.cshtml"
+
+ public ErrorPage(ErrorPageModel model)
+ {
+ Model = model;
+ }
+
+ public ErrorPageModel Model { get; set; }
+
+#line default
+#line hidden
+ }
+}
+#pragma warning restore 1591
diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.cshtml b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.cshtml
new file mode 100644
index 0000000000..3d0a28e8ef
--- /dev/null
+++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.cshtml
@@ -0,0 +1,258 @@
+@using System
+@using System.Globalization
+@using System.Linq
+@using System.Net
+@using System.Reflection
+@using Microsoft.AspNetCore.Diagnostics.RazorViews
+@using Microsoft.AspNetCore.Diagnostics
+@functions
+{
+ public ErrorPage(ErrorPageModel model)
+ {
+ Model = model;
+ }
+
+ public ErrorPageModel Model { get; set; }
+}
+@{
+ // TODO: Response.ReasonPhrase = "Internal Server Error";
+ Response.ContentType = "text/html; charset=utf-8";
+ string location = string.Empty;
+}
+
+
+
+ @errorDetail.Error.GetType().Name: @{ Output.Write(HtmlEncodeAndReplaceLineBreaks(errorDetail.Error.Message)); }
+
+ var firstFrame = errorDetail.StackFrames.FirstOrDefault();
+ if (firstFrame != null)
+ {
+ location = firstFrame.Function;
+ }
+ if (!string.IsNullOrEmpty(location) && firstFrame != null && !string.IsNullOrEmpty(firstFrame.File))
+ {
+
+ @if (Model.Query.Any())
+ {
+
+
+
+ | @Resources.ErrorPageHtml_VariableColumn |
+ @Resources.ErrorPageHtml_ValueColumn |
+
+
+
+ @foreach (var kv in Model.Query.OrderBy(kv => kv.Key))
+ {
+ foreach (var v in kv.Value)
+ {
+
+ | @kv.Key |
+ @v |
+
+ }
+ }
+
+
+ }
+ else
+ {
+
@Resources.ErrorPageHtml_NoQueryStringData
+ }
+
+
+
+ @if (Model.Cookies.Any())
+ {
+
+
+
+ | @Resources.ErrorPageHtml_VariableColumn |
+ @Resources.ErrorPageHtml_ValueColumn |
+
+
+
+ @foreach (var kv in Model.Cookies.OrderBy(kv => kv.Key))
+ {
+
+ | @kv.Key |
+ @kv.Value |
+
+ }
+
+
+ }
+ else
+ {
+
@Resources.ErrorPageHtml_NoCookieData
+ }
+
+
+
+
+
diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.css b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.css
new file mode 100644
index 0000000000..7fd48c1258
--- /dev/null
+++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.css
@@ -0,0 +1,196 @@
+body {
+ font-family: 'Segoe UI', Tahoma, Arial, Helvetica, sans-serif;
+ font-size: .813em;
+ color: #222;
+ background-color: #fff;
+}
+
+h1, h2, h3, h4, h5 {
+ /*font-family: 'Segoe UI',Tahoma,Arial,Helvetica,sans-serif;*/
+ font-weight: 100;
+}
+
+h1 {
+ color: #44525e;
+ margin: 15px 0 15px 0;
+}
+
+h2 {
+ margin: 10px 5px 0 0;
+}
+
+h3 {
+ color: #363636;
+ margin: 5px 5px 0 0;
+}
+
+code {
+ font-family: Consolas, "Courier New", courier, monospace;
+}
+
+body .titleerror {
+ padding: 3px 3px 6px 3px;
+ display: block;
+ font-size: 1.5em;
+ font-weight: 100;
+}
+
+body .location {
+ margin: 3px 0 10px 30px;
+}
+
+#header {
+ font-size: 18px;
+ padding: 15px 0;
+ border-top: 1px #ddd solid;
+ border-bottom: 1px #ddd solid;
+ margin-bottom: 0;
+}
+
+ #header li {
+ display: inline;
+ margin: 5px;
+ padding: 5px;
+ color: #a0a0a0;
+ cursor: pointer;
+ }
+
+ #header .selected {
+ background: #44c5f2;
+ color: #fff;
+ }
+
+#stackpage ul {
+ list-style: none;
+ padding-left: 0;
+ margin: 0;
+ /*border-bottom: 1px #ddd solid;*/
+}
+
+#stackpage .details {
+ font-size: 1.2em;
+ padding: 3px;
+ color: #000;
+}
+
+#stackpage .stackerror {
+ padding: 5px;
+ border-bottom: 1px #ddd solid;
+}
+
+
+#stackpage .frame {
+ padding: 0;
+ margin: 0 0 0 30px;
+}
+
+ #stackpage .frame h3 {
+ padding: 2px;
+ margin: 0;
+ }
+
+#stackpage .source {
+ padding: 0 0 0 30px;
+}
+
+ #stackpage .source ol li {
+ font-family: Consolas, "Courier New", courier, monospace;
+ white-space: pre;
+ background-color: #fbfbfb;
+ }
+
+#stackpage .frame .source .highlight li span {
+ color: #FF0000;
+}
+
+#stackpage .source ol.collapsible li {
+ color: #888;
+}
+
+ #stackpage .source ol.collapsible li span {
+ color: #606060;
+ }
+
+.page table {
+ border-collapse: separate;
+ border-spacing: 0;
+ margin: 0 0 20px;
+}
+
+.page th {
+ vertical-align: bottom;
+ padding: 10px 5px 5px 5px;
+ font-weight: 400;
+ color: #a0a0a0;
+ text-align: left;
+}
+
+.page td {
+ padding: 3px 10px;
+}
+
+.page th, .page td {
+ border-right: 1px #ddd solid;
+ border-bottom: 1px #ddd solid;
+ border-left: 1px transparent solid;
+ border-top: 1px transparent solid;
+ box-sizing: border-box;
+}
+
+ .page th:last-child, .page td:last-child {
+ border-right: 1px transparent solid;
+ }
+
+.page .length {
+ text-align: right;
+}
+
+a {
+ color: #1ba1e2;
+ text-decoration: none;
+}
+
+ a:hover {
+ color: #13709e;
+ text-decoration: underline;
+ }
+
+.showRawException {
+ cursor: pointer;
+ color: #44c5f2;
+ background-color: transparent;
+ font-size: 1.2em;
+ text-align: left;
+ text-decoration: none;
+ display: inline-block;
+ border: 0;
+ padding: 0;
+}
+
+.rawExceptionStackTrace {
+ font-size: 1.2em;
+}
+
+.rawExceptionBlock {
+ border-top: 1px #ddd solid;
+ border-bottom: 1px #ddd solid;
+}
+
+.showRawExceptionContainer {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.expandCollapseButton {
+ cursor: pointer;
+ float: left;
+ height: 16px;
+ width: 16px;
+ font-size: 10px;
+ position: absolute;
+ left: 10px;
+ background-color: #eee;
+ padding: 0;
+ border: 0;
+ margin: 0;
+}
diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.js b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.js
new file mode 100644
index 0000000000..3925cfd2f2
--- /dev/null
+++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPage.js
@@ -0,0 +1,192 @@
+(function (window, undefined) {
+ "use strict";
+
+ function ns(selector, element) {
+ return new NodeCollection(selector, element);
+ }
+
+ function NodeCollection(selector, element) {
+ this.items = [];
+ element = element || window.document;
+
+ var nodeList;
+
+ if (typeof (selector) === "string") {
+ nodeList = element.querySelectorAll(selector);
+ for (var i = 0, l = nodeList.length; i < l; i++) {
+ this.items.push(nodeList.item(i));
+ }
+ }
+ }
+
+ NodeCollection.prototype = {
+ each: function (callback) {
+ for (var i = 0, l = this.items.length; i < l; i++) {
+ callback(this.items[i], i);
+ }
+ return this;
+ },
+
+ children: function (selector) {
+ var children = [];
+
+ this.each(function (el) {
+ children = children.concat(ns(selector, el).items);
+ });
+
+ return ns(children);
+ },
+
+ hide: function () {
+ this.each(function (el) {
+ el.style.display = "none";
+ });
+
+ return this;
+ },
+
+ toggle: function () {
+ this.each(function (el) {
+ el.style.display = el.style.display === "none" ? "" : "none";
+ });
+
+ return this;
+ },
+
+ show: function () {
+ this.each(function (el) {
+ el.style.display = "";
+ });
+
+ return this;
+ },
+
+ addClass: function (className) {
+ this.each(function (el) {
+ var existingClassName = el.className,
+ classNames;
+ if (!existingClassName) {
+ el.className = className;
+ } else {
+ classNames = existingClassName.split(" ");
+ if (classNames.indexOf(className) < 0) {
+ el.className = existingClassName + " " + className;
+ }
+ }
+ });
+
+ return this;
+ },
+
+ removeClass: function (className) {
+ this.each(function (el) {
+ var existingClassName = el.className,
+ classNames, index;
+ if (existingClassName === className) {
+ el.className = "";
+ } else if (existingClassName) {
+ classNames = existingClassName.split(" ");
+ index = classNames.indexOf(className);
+ if (index > 0) {
+ classNames.splice(index, 1);
+ el.className = classNames.join(" ");
+ }
+ }
+ });
+
+ return this;
+ },
+
+ attr: function (name) {
+ if (this.items.length === 0) {
+ return null;
+ }
+
+ return this.items[0].getAttribute(name);
+ },
+
+ on: function (eventName, handler) {
+ this.each(function (el, idx) {
+ var callback = function (e) {
+ e = e || window.event;
+ if (!e.which && e.keyCode) {
+ e.which = e.keyCode; // Normalize IE8 key events
+ }
+ handler.apply(el, [e]);
+ };
+
+ if (el.addEventListener) { // DOM Events
+ el.addEventListener(eventName, callback, false);
+ } else if (el.attachEvent) { // IE8 events
+ el.attachEvent("on" + eventName, callback);
+ } else {
+ el["on" + type] = callback;
+ }
+ });
+
+ return this;
+ },
+
+ click: function (handler) {
+ return this.on("click", handler);
+ },
+
+ keypress: function (handler) {
+ return this.on("keypress", handler);
+ }
+ };
+
+ function frame(el) {
+ ns(".source .collapsible", el).toggle();
+ }
+
+ function expandCollapseButton(el) {
+ var frameId = el.getAttribute("data-frameId");
+ frame(document.getElementById(frameId));
+ if (el.innerText === "+") {
+ el.innerText = "-";
+ }
+ else {
+ el.innerText = "+";
+ }
+ }
+
+ function tab(el) {
+ var unselected = ns("#header .selected").removeClass("selected").attr("id");
+ var selected = ns("#" + el.id).addClass("selected").attr("id");
+
+ ns("#" + unselected + "page").hide();
+ ns("#" + selected + "page").show();
+ }
+
+ ns(".rawExceptionDetails").hide();
+ ns(".collapsible").hide();
+ ns(".page").hide();
+ ns("#stackpage").show();
+
+ ns(".expandCollapseButton")
+ .click(function () {
+ expandCollapseButton(this);
+ })
+ .keypress(function (e) {
+ if (e.which === 13) {
+ expandCollapseButton(this);
+ }
+ });
+
+ ns("#header li")
+ .click(function () {
+ tab(this);
+ })
+ .keypress(function (e) {
+ if (e.which === 13) {
+ tab(this);
+ }
+ });
+
+ ns(".showRawException")
+ .click(function () {
+ var exceptionDetailId = this.getAttribute("data-exceptionDetailId");
+ ns("#" + exceptionDetailId).toggle();
+ });
+})(window);
\ No newline at end of file
diff --git a/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPageModel.cs b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPageModel.cs
new file mode 100644
index 0000000000..cb9c213a39
--- /dev/null
+++ b/src/Middleware/Diagnostics/src/DeveloperExceptionPage/Views/ErrorPageModel.cs
@@ -0,0 +1,42 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.Collections.Generic;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Primitives;
+using Microsoft.Extensions.StackTrace.Sources;
+
+namespace Microsoft.AspNetCore.Diagnostics.RazorViews
+{
+ ///