File: Startup.cs
Web Access
Project: src\src\Middleware\Diagnostics\test\testassets\ExceptionHandlerSample\ExceptionHandlerSample.csproj (ExceptionHandlerSample)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Diagnostics;
 
namespace ExceptionHandlerSample;
 
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 =>
            {
                context.Response.StatusCode = 500;
                context.Response.ContentType = "text/html";
                await context.Response.WriteAsync("<html><body>\r\n");
                await context.Response.WriteAsync("We're sorry, we encountered an un-expected issue with your application.<br>\r\n");
 
                var error = context.Features.Get<IExceptionHandlerFeature>();
                if (error != null)
                {
                    // This error would not normally be exposed to the client
                    await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.Encode(error.Error.Message) + "<br>\r\n");
                }
                await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n");
                await context.Response.WriteAsync("</body></html>\r\n");
                await context.Response.WriteAsync(new string(' ', 512)); // Padding for IE
            });
        });
 
        // We could also configure it to re-execute the request on the normal pipeline with a different path.
        // app.UseExceptionHandler("/error.html");
 
        // The broken section of our application.
        app.Map("/throw", throwApp =>
        {
            throwApp.Run(context => { throw new Exception("Application Exception"); });
        });
 
        app.UseStaticFiles();
 
        // The home page.
        app.Run(async context =>
        {
            context.Response.ContentType = "text/html";
            await context.Response.WriteAsync("<html><body>Welcome to the sample<br><br>\r\n");
            await context.Response.WriteAsync("Click here to throw an exception: <a href=\"/throw\">throw</a>\r\n");
            await context.Response.WriteAsync("</body></html>\r\n");
        });
    }
}