105 lines
4.0 KiB
C#
105 lines
4.0 KiB
C#
using LY.App.Service;
|
|
using System.Text;
|
|
|
|
namespace LY.App.MiddleWare
|
|
{
|
|
public class CustomErrorMiddleware
|
|
{
|
|
private readonly RequestDelegate _next;
|
|
private string body = string.Empty;
|
|
private readonly LogService _logger;
|
|
public CustomErrorMiddleware(RequestDelegate requestDelegate, LogService logger)
|
|
{
|
|
this._next = requestDelegate;
|
|
_logger = logger;
|
|
}
|
|
public async Task Invoke(HttpContext context, IConfiguration configuration)
|
|
{
|
|
try
|
|
{
|
|
// Check if the request is a form post with a file
|
|
if (context.Request.HasFormContentType && context.Request.Form.Files.Count > 0)
|
|
{
|
|
foreach (var file in context.Request.Form.Files)
|
|
{
|
|
// Log file information
|
|
|
|
//_logger.LogInformation($"File uploaded - Name: {file.Name}, " +
|
|
// $"FileName: {file.FileName}, " +
|
|
// $"ContentType: {file.ContentType}, " +
|
|
// $"Size: {file.Length} bytes");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
context.Request.EnableBuffering();
|
|
using (var reader = new StreamReader(context.Request.Body,
|
|
encoding: Encoding.UTF8,
|
|
detectEncodingFromByteOrderMarks: false,
|
|
leaveOpen: true))
|
|
{
|
|
body = await reader.ReadToEndAsync();
|
|
// Do some processing with body…
|
|
// Reset the request body stream position so the next middleware can read it
|
|
context.Request.Body.Position = 0;
|
|
}
|
|
}
|
|
|
|
|
|
await _next.Invoke(context);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await HandleError(context, ex, configuration);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 错误信息处理方法
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <param name="ex"></param>
|
|
/// <returns></returns>
|
|
private async Task HandleError(HttpContext context, Exception ex, IConfiguration configuration)
|
|
{
|
|
string pars = string.Empty;
|
|
var method = context.Request.Method.ToUpper();
|
|
var enable = configuration.GetSection("log2db").Value.ToLower();
|
|
if (enable == "true")
|
|
{
|
|
switch (method)
|
|
{
|
|
case "GET":
|
|
pars = context.Request.QueryString.ToString();
|
|
break;
|
|
case "POST":
|
|
// var requestReader = new StreamReader(context.Request.Body);
|
|
// pars = await requestReader.ReadToEndAsync();
|
|
pars = body;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
await _logger.AddLog(new Model.AddLog()
|
|
{
|
|
StackTrace = ex.StackTrace.Length > 1000 ? ex.StackTrace.Substring(0, 999) : ex.StackTrace,
|
|
Message = ex.Message,
|
|
Parameters = pars,
|
|
url = context.Request.Path,
|
|
});
|
|
}
|
|
Console.WriteLine($"错误消息:{ex.Message}错误追踪{ex.StackTrace}");
|
|
context.Response.StatusCode = 500;
|
|
context.Response.ContentType = "text/json;charset=utf-8;";
|
|
await context.Response.WriteAsJsonAsync(new { code = 1, msg = $"抱歉,服务端出错了,错误消息:{ex.Message}", data = "" });
|
|
}
|
|
}
|
|
public static class RequestCultureMiddlewareExtensions
|
|
{
|
|
public static IApplicationBuilder UseCustomErrorMiddleware(
|
|
this IApplicationBuilder builder)
|
|
{
|
|
return builder.UseMiddleware<CustomErrorMiddleware>();
|
|
}
|
|
}
|
|
}
|