From 7a7fd33efbf5a4416069500ae079d481ca87f2fe Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 2 Apr 2019 15:49:49 +0300 Subject: [PATCH] closes abpframework/abp#942 --- .../Controllers/ErrorController.cs | 127 ++++++++++++++++++ .../Controllers/HomeController.cs | 3 +- .../app/Volo.DocsTestApp/DocsTestAppModule.cs | 5 +- .../app/Volo.DocsTestApp/Pages/Index.cshtml | 4 +- .../docs/src/Volo.Docs.Web/DocsWebModule.cs | 2 + .../Pages/Documents/Project/Index.cshtml.cs | 10 +- 6 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 modules/docs/app/Volo.DocsTestApp/Controllers/ErrorController.cs diff --git a/modules/docs/app/Volo.DocsTestApp/Controllers/ErrorController.cs b/modules/docs/app/Volo.DocsTestApp/Controllers/ErrorController.cs new file mode 100644 index 0000000000..943a3a85f2 --- /dev/null +++ b/modules/docs/app/Volo.DocsTestApp/Controllers/ErrorController.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Net; +using Microsoft.AspNetCore.Diagnostics; +using Microsoft.AspNetCore.Mvc; +using Serilog; +using Volo.Abp.AspNetCore.Mvc; + +namespace Volo.DocsTestApp.Controllers +{ + public class ErrorController : AbpController + { + [Route("error/{statusCode}")] + [HttpGet] + public IActionResult Index(int statusCode = 0) + { + var statusFeature = HttpContext.Features.Get(); + if (statusFeature != null) + { + Log.Warning("Handled {0} error for URL: {1}", statusCode, statusFeature.OriginalPath); + } + + var isValidStatusCode = Enum.IsDefined(typeof(HttpStatusCode), statusCode); + if (!isValidStatusCode) + { + statusCode = (int)HttpStatusCode.BadRequest; + } + + return new ContentResult + { + ContentType = System.Net.Mime.MediaTypeNames.Text.Html, + StatusCode = statusCode, + Content = string.Format(HtmlBody, _errorMessages.ContainsKey(statusCode) + ? _errorMessages[statusCode] + : "Looks like something went wrong!") + }; + } + + private const string HtmlBody = "
{0}
Go to home page
"; + + /*For more ASCII arts http://patorjk.com/software/taag/#p=display&h=0&f=Big&t=400*/ + private readonly Dictionary _errorMessages = new Dictionary + { + { + 400, @" + _ _ ___ ___ + | || | / _ \ / _ \ + | || |_ | | | | | | | | + |__ _| | | | | | | | | + | | | |_| | | |_| | + |_| \___/ \___/ + +You've sent a bad request!" + }, + { + 401, @" + _ _ ___ __ + | || | / _ \ /_ | + | || |_ | | | | | | + |__ _| | | | | | | + | | | |_| | | | + |_| \___/ |_| + +Authorization required!" + }, + { + 403, + @" + _ _ ___ ____ + | || | / _ \ |___ \ + | || |_ | | | | __) | + |__ _| | | | | |__ < + | | | |_| | ___) | + |_| \___/ |____/ + +This is a forbidden area!" + }, + { + 404, @" + _ _ ___ _ _ + | || | / _ \ | || | + | || |_ | | | | | || |_ + |__ _| | | | | |__ _| + | | | |_| | | | + |_| \___/ |_| + +We can't find the page you're looking for..." + }, + { + 500, + @" + _____ ___ ___ + | ____| / _ \ / _ \ + | |__ | | | | | | | | + |___ \ | | | | | | | | + ___) | | |_| | | |_| | + |____/ \___/ \___/ + +Houston, we have a problem. Internal server error!" + }, + { + 502, + @" + _____ ___ ___ + | ____| / _ \ |__ \ + | |__ | | | | ) | + |___ \ | | | | / / + ___) | | |_| | / /_ + |____/ \___/ |____| + +Ooops! Our server is experiencing a mild case of the hiccups." + }, + { + 503, + @" + _____ ___ ____ + | ____| / _ \ |___ \ + | |__ | | | | __) | + |___ \ | | | | |__ < + ___) | | |_| | ___) | + |____/ \___/ |____/ + +Looks like we're having some server issues." + } + }; + } +} diff --git a/modules/docs/app/Volo.DocsTestApp/Controllers/HomeController.cs b/modules/docs/app/Volo.DocsTestApp/Controllers/HomeController.cs index a80cc2dfeb..0750e72b20 100644 --- a/modules/docs/app/Volo.DocsTestApp/Controllers/HomeController.cs +++ b/modules/docs/app/Volo.DocsTestApp/Controllers/HomeController.cs @@ -1,5 +1,4 @@ -using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; namespace Volo.DocsTestApp.Controllers { diff --git a/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs b/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs index 9e25b70345..275eb0f713 100644 --- a/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs +++ b/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics; using System.Globalization; using System.IO; using Microsoft.AspNetCore.Builder; @@ -108,7 +109,7 @@ namespace Volo.DocsTestApp app.UseDeveloperExceptionPage(); app.UseVirtualFiles(); - + app.UseSwagger(); app.UseSwaggerUI(options => { @@ -118,6 +119,8 @@ namespace Volo.DocsTestApp app.UseAuthentication(); app.UseRequestLocalization(app.ApplicationServices.GetRequiredService>().Value); + + app.UseStatusCodePagesWithReExecute("/error/{0}"); app.UseMvc(routes => { diff --git a/modules/docs/app/Volo.DocsTestApp/Pages/Index.cshtml b/modules/docs/app/Volo.DocsTestApp/Pages/Index.cshtml index f47edcbd98..ca46c1b442 100644 --- a/modules/docs/app/Volo.DocsTestApp/Pages/Index.cshtml +++ b/modules/docs/app/Volo.DocsTestApp/Pages/Index.cshtml @@ -1,4 +1,4 @@ @page @model Volo.DocsTestApp.Pages.IndexModel -

Welcome to the Docs demo application.

-Go to Docs \ No newline at end of file +

Welcome to the Docs Demo!

+Go to documents... \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs index 689b9ec929..89301265ea 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsWebModule.cs @@ -38,6 +38,8 @@ namespace Volo.Docs Configure(options => { //TODO: Make configurable! + options.Conventions.AddPageRoute("/Documents/Project/Index", "documents/{projectName}"); + options.Conventions.AddPageRoute("/Documents/Project/Index", "documents/{projectName}/{version}/{*documentName}"); }); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index a80aeb474c..378903d121 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -42,8 +42,8 @@ namespace Volo.Docs.Pages.Documents.Project private readonly IProjectAppService _projectAppService; public IndexModel( - IDocumentAppService documentAppService, - IDocumentToHtmlConverterFactory documentToHtmlConverterFactory, + IDocumentAppService documentAppService, + IDocumentToHtmlConverterFactory documentToHtmlConverterFactory, IProjectAppService projectAppService) { _documentAppService = documentAppService; @@ -80,6 +80,10 @@ namespace Volo.Docs.Pages.Documents.Project private async Task SetVersionAsync() { //TODO: Needs refactoring + if (string.IsNullOrWhiteSpace(Version)) + { + Version = DocsAppConsts.Latest; + } var output = await _projectAppService.GetVersionsAsync(Project.ShortName); var versions = output.Items @@ -142,7 +146,7 @@ namespace Volo.Docs.Pages.Documents.Project Navigation.ConvertItems(); } - + public string CreateVersionLink(VersionInfoViewModel latestVersion, string version, string documentName = null) { if (latestVersion == null || latestVersion.Version == version)