aspnetcore/test/WebSites/Microsoft.AspNet.Mvc.TestCo.../ErrorReporterMiddleware.cs

52 lines
1.6 KiB
C#

// 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;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;
namespace Microsoft.AspNet.Mvc.TestConfiguration
{
/// <summary>
/// A middleware that reports errors via header values. Useful for tests that want to verify
/// an exception that goes unhandled by the MVC part of the stack.
/// </summary>
public class ErrorReporterMiddleware
{
public static readonly string ExceptionMessageHeader = "ExceptionMessage";
public static readonly string ExceptionTypeHeader = "ExceptionType";
private readonly RequestDelegate _next;
public ErrorReporterMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception exception)
{
if (context.Response.HasStarted)
{
throw;
}
else
{
context.Response.StatusCode = 500;
var escapedMessage = exception.Message.Replace('\r', '_').Replace('\n', '_');
context.Response.Headers.Add(ExceptionTypeHeader, new string[] { exception.GetType().FullName });
context.Response.Headers.Add(ExceptionMessageHeader, new string[] { escapedMessage });
}
}
}
}
}