如何不使用DeveloperExceptionPageMiddleware

问题描述 投票:0回答:3

使用 ASP.NET Core 6.0 的新模板(其中包括

var builder = WebApplication.CreateBuilder(args);
)时,会自动添加 DeveloperExceptionPageMiddleware。我不想使用这个中间件,这样我就可以在所有环境中提供一致的错误响应。

有没有办法将我的自定义错误处理放在这个中间件之前,或者阻止它被包含在内?或者添加后将其删除?

c# asp.net-core .net-6.0 asp.net-core-6.0
3个回答
11
投票

目前您无法在开发环境的最小托管模型中禁用

DeveloperExceptionPageMiddleware
,因为它已设置而无需任何配置选项。所以选项是:

  1. 使用/切换回通用主机模型(带有

    Startup
    的模型)并跳过
    UseDeveloperExceptionPage
    调用。

  2. 请勿使用开发环境

  3. 设置自定义异常处理。

    DeveloperExceptionPageMiddleware
    依赖于这样一个事实,即稍后不会在管道中处理异常,因此在构建应用程序后立即添加自定义异常处理程序应该可以解决问题:

app.Use(async (context, func) =>
{
    try
    {
        await func();
    }
    catch (Exception e)
    {
        context.Response.Clear();

        // Preserve the status code that would have been written by the server automatically when a BadHttpRequestException is thrown.
        if (e is BadHttpRequestException badHttpRequestException)
        {
            context.Response.StatusCode = badHttpRequestException.StatusCode;
        }
        else
        {
            context.Response.StatusCode = 500;
        }
        // log, write custom response and so on...
    }
});

自定义异常处理程序页面

UseExceptionHandler
一起使用也应该(除非处理程序本身抛出🙂)工作。


11
投票

跳过

DeveloperExceptionPageMiddleware
的最简单方法是不使用
Development
环境

您可以修改

Properties/launchSettings.json
文件,将
ASPNETCORE_ENVIRONMENT
更改为 Development
 之外的任何内容。

{ "$schema": "https://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:43562", "sslPort": 44332 } }, "profiles": { "api1": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "https://localhost:7109;http://localhost:5111", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "MyDevelopment" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "MyDevelopment" } } } }
在您的应用程序中,将所有 

builder.Environment.IsDevelopment()

 更改为 
builder.Environment.IsEnvironment("MyDevelopment")


0
投票
根据

docs,您可以使用此代码

var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddProblemDetails(); // Add this line var app = builder.Build(); app.UseExceptionHandler(); // Add this line app.UseStatusCodePages(); if (app.Environment.IsDevelopment()) // In the development mode show the developer exception page { app.UseDeveloperExceptionPage(); } app.MapControllers(); app.Run();
    
© www.soinside.com 2019 - 2024. All rights reserved.