我正在开发一个.NET Core 2.0 Web应用程序。我得到了一个模拟数据库,其中应用程序运行良好。今天我创建了一个干净的数据库,并在IIS Express和常规IIS上都收到了此错误500。问题是:我无法调试为什么抛出错误 500。应用程序刚刚运行。
我目前尝试过:
- 通过激活 IIS 日志来检查
stdoutLogEnabled="true"
,创建的唯一日志是:
托管环境:生产内容根路径: C:\Users\pistolon\Downloads\peto 现在正在收听: http://localhost:13361 应用程序已启动。按 Ctrl+C 关闭。
- 从启动.cs文件开始调试。
当我切换回模拟数据库时,它可以正常工作。
你们中的任何人可以指出我在哪里可以获得异常或记录吗?
可以使用事件查看器或 Visual Studio 远程调试来调试已部署的应用程序。
此外,您可以使用像Serilog这样的日志记录框架,并使用其中一个接收器(如文件接收器),并创建一个中间件来捕获和记录您的异常,并将其StackTrace,消息,源写入您可以读取它们的日志文件。
下面是错误处理中间件实现:
public class ErrorHandlingMiddleware
{
readonly RequestDelegate _next;
static ILogger<ErrorHandlingMiddleware> _logger;
public ErrorHandlingMiddleware(RequestDelegate next,
ILogger<ErrorHandlingMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
static async Task HandleExceptionAsync(
HttpContext context,
Exception exception)
{
string error = "An internal server error has occured.";
_logger.LogError($"{exception.Source} - {exception.Message} - {exception.StackTrace} - {exception.TargetSite.Name}");
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(new
{
error
}));
}
}
用法 :
app.UseMiddleware<ErrorHandlingMiddleware>();
我认为这些信息不足以消除,但是如果您在使用真实数据库时看到 500 错误并且模拟数据库正常工作,我敢打赌您的问题出在连接字符串上。您还可以检查以确保您也处于开发环境中。
更新:您也可以尝试使用应用程序。UseDeveloperExceptionPage();