protected override async Task RenderContentsAsync(XmlWriter writer) { await RenderTitleAsync(writer); await SpeedBarComponent.RenderAsync(writer, SpeedBarComponent.GetRssFeed(BasePageName), SpeedBarComponent.GetRssDigestFeed(BasePageName), SpeedBarComponent.GetDownloadLog(BasePageName)); if (errorLogEntries.Count < 1) { await RenderNoErrorsAsync(writer); } else { // Write error number range displayed on this page and the // total available in the log, followed by stock // page sizes. await writer.WriteStartElementAsync("p"); await RenderStatsAsync(writer); await RenderStockPageSizesAsync(writer); await writer.WriteEndElementAsync(); // </p> // Write out the main table to display the errors. await RenderErrorsAsync(writer); // Write out page navigation links. await RenderPageNavigatorsAsync(writer); } }
private async Task RenderErrorAsync(XmlWriter writer) { var error = errorLogEntry.Error; await writer.WriteStartElementAsync("h1"); await writer.WriteAttributeStringAsync("id", "PageTitle"); { await writer.WriteStringAsync(error.Message); } await writer.WriteEndElementAsync(); await SpeedBarComponent.RenderAsync(writer, SpeedBarComponent.GetHome(BasePageName)); await writer.WriteStartElementAsync("p"); await writer.WriteAttributeStringAsync("id", "ErrorTitle"); { await writer.WriteStartElementAsync("span"); await writer.WriteAttributeStringAsync("id", "ErrorType"); { await writer.WriteStringAsync(error.TypeName); } await writer.WriteEndElementAsync(); await writer.WriteStartElementAsync("span"); await writer.WriteAttributeStringAsync("id", "ErrorTypeMessageSeparator"); { await writer.WriteStringAsync(": "); } await writer.WriteEndElementAsync(); await writer.WriteStartElementAsync("span"); await writer.WriteAttributeStringAsync("id", "ErrorMessage"); { await writer.WriteStringAsync(error.Message); } await writer.WriteEndElementAsync(); } await writer.WriteEndElementAsync(); await writer.WriteStartElementAsync("pre"); await writer.WriteAttributeStringAsync("id", "ErrorDetail"); { await writer.WriteStringAsync(error.Detail); } await writer.WriteEndElementAsync(); await writer.WriteStartElementAsync("p"); await writer.WriteAttributeStringAsync("id", "ErrorLogTime"); { await writer.WriteStringAsync($"Logged on {error.Time}."); } await writer.WriteEndElementAsync(); await writer.WriteStartElementAsync("p"); { await writer.WriteStringAsync("See also:"); } await writer.WriteEndElementAsync(); await writer.WriteStartElementAsync("ul"); { await writer.WriteStartElementAsync("li"); { await writer.WriteStringAsync("Raw/Source data in "); await writer.WriteStartElementAsync("a"); await writer.WriteAttributeStringAsync("href", "json" + requestQuery); await writer.WriteAttributeStringAsync("rel", "alternate"); await writer.WriteAttributeStringAsync("type", "application/json"); { await writer.WriteStringAsync("JSON"); } await writer.WriteEndElementAsync(); } await writer.WriteEndElementAsync(); } await writer.WriteEndElementAsync(); await RenderDictionaryAsync(writer, error.ServerEnvironment, "ServerVariables", "Server Environment"); await RenderDictionaryAsync(writer, error.Headers.ToDictionary(pair => pair.Key, pair => string.Join(", ", pair.Value)), "ServerVariables", "Headers"); await RenderDictionaryAsync(writer, error.Query.ToDictionary(pair => pair.Key, pair => string.Join(", ", pair.Value)), "ServerVariables", "Query"); await RenderDictionaryAsync(writer, error.Cookies, "ServerVariables", "Cookies"); }