6.2K Star 11.9K Fork 4K

GVPdotNET China / Furion

 / 详情

友好异常处理

已完成
创建于  
2021-07-12 15:15

特别说明:如果 Issue 报告为问题且开发成员回复确认问题之后但三天内都不能得到反馈,则视为无效Issue。

Furion 版本号

2.12.9


Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp

描述你的问题

采用自定义IUnifyResultProvider方式捕捉异常,Startup类Configure方法中设置返回 200 状态码列表时,如果设置null,接口会返回200,但同时会抛出异常,(MiniProfiler不会记录起来)。


异常堆栈信息

[2021-07-12 13:57:45.013 ERR] An unhandled exception has occurred while executing the request.
{"EventId":{"Id":1,"Name":"UnhandledException"},"SourceContext":"Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware","RequestId":"80000052-0000-fd00-b63f-84710c7967bb","RequestPath":"/api/dev"}
System.InvalidOperationException: StatusCode cannot be set because the response has already started.
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.ThrowResponseAlreadyStartedException(String name)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.set_StatusCode(Int32 value)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.set_StatusCode(Int32 value)
at Microsoft.AspNetCore.Http.DefaultHttpResponse.set_StatusCode(Int32 value)
at Furion.UnifyResult.UnifyContext.SetResponseStatusCodes(HttpContext context, Int32 statusCode, UnifyResultStatusCodesOptions options)
at IMyBest.Lottery.Core.Extensions.MyUnifyResultProvider.OnResponseStatusCodes(HttpContext context, Int32 statusCode, UnifyResultStatusCodesOptions options) in D:\xxx\Extensions\MyUnifyResultProvider.cs:line 91
at Furion.UnifyResult.UnifyResultStatusCodesMiddleware.InvokeAsync(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

[2021-07-12 13:57:47.339 ERR] Connection ID "18230571293206380625", Request ID "80000052-0000-fd00-b63f-84710c7967bb": An unhandled exception was thrown by the application.
{"EventId":{"Id":2,"Name":"ApplicationError"},"SourceContext":"Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer","RequestId":"80000052-0000-fd00-b63f-84710c7967bb","RequestPath":"/api/dev"}
System.InvalidOperationException: StatusCode cannot be set because the response has already started.
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.ThrowResponseAlreadyStartedException(String name)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.set_StatusCode(Int32 value)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.set_StatusCode(Int32 value)
at Microsoft.AspNetCore.Http.DefaultHttpResponse.set_StatusCode(Int32 value)
at Furion.UnifyResult.UnifyContext.SetResponseStatusCodes(HttpContext context, Int32 statusCode, UnifyResultStatusCodesOptions options)
at IMyBest.Lottery.Core.Extensions.MyUnifyResultProvider.OnResponseStatusCodes(HttpContext context, Int32 statusCode, UnifyResultStatusCodesOptions options) in D:\xxx\Extensions\MyUnifyResultProvider.cs:line 91
at Furion.UnifyResult.UnifyResultStatusCodesMiddleware.InvokeAsync(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
at StackExchange.Profiling.MiniProfilerMiddleware.Invoke(HttpContext context) in C:\projects\dotnet\src\MiniProfiler.AspNetCore\MiniProfilerMiddleware.cs:line 103
at Furion.StartupFilter.<>c__DisplayClass0_1.<b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync()


代码或代码仓库

// 添加规范化结果状态码,需要在这里注册
app.UseUnifyResultStatusCodes(options =>
{
    options.Return200StatusCodes = null; // 设置null会报错:StatusCode cannot be set because the response has already started.
    //options.Return200StatusCodes = new[] { 401, 403 }; // 配置返回 200 的状态码
});


数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果

默认:401,403,如果设置为 null,则标识所有状态码都返回 200,不抛出异常。


评论 (1)

IonKr 创建了任务
IonKr 关联仓库设置为dotNET China/Furion
IonKr 修改了描述
IonKr 修改了描述
IonKr 修改了描述
IonKr 修改了描述
百小僧 任务状态待办的 修改为进行中
百小僧 负责人设置为百小僧
百小僧 添加了
 
漏洞
标签
百小僧 添加了
 
优化
标签
百小僧 里程碑设置为Furion 2021
百小僧 关联分支设置为master
百小僧 计划截止日期设置为2021-07-13
百小僧 计划开始日期设置为2021-07-13
百小僧 置顶等级设置为
百小僧 优先级设置为严重
百小僧 通过 dotnetchina/Furion Commit aea8799任务状态进行中 修改为已完成
百小僧 置顶等级 修改为不置顶
展开全部操作日志

更新最新版。2.13.0

百小僧 关联分支master 修改为未关联

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助