- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
AspNet.Core 似乎立即开始发送 IEnumerable
的响应,而没有遍历整个集合。例如:
[HttpGet("")]
public async Task<IActionResult> GetData()
{
IEnumerable<MyData> result = await _service.GetData();
return Ok(result.Select(_mapper.MapMyDataToMyDataWeb));
}
现在在其中一个元素的映射过程中发生异常,所以我假设一个 500
响应,但实际上发生的是我得到一个 200
只有部分(和不正确的)Json。
我假设它是 Asp.Net Core
中的一项功能而不是错误,它提供了这种行为,而且通过调用例如修复它也相对容易ToList()
,但我想知道是否有某种标志可以防止这种情况发生,因为它实际上没有意义,例如API 项目和标准 JSON 响应。
我无法在文档中找到任何描述此行为以及如何防止它的内容。
附言我已经验证调用 ToList()
修复了问题并且响应是 500 并有正确的异常(使用 UseDeveloperExceptionPage
)
最佳答案
看来这实际上是“设计使然”,这个issue在 Asp.Net Core github 存储库上被提出过几次。
发生的情况是带有 200 的 header 已经发送,而正文没有。虽然我认为枚举必须在发送 header 之前进行,但 asp.net 团队表示它将在服务器上使用更多资源,这就是为什么会这样。
引用一段话:
It is very likely the case that your exception is thrown while writing to the body, after headers have already been sent to the client, so there's no take-backs on the 200 that was already sent as part of the response. The client will see an error because the body will come back as incomplete.
If you want to deterministically report a 500 when this happens you'll need to either:
- Buffer your IEnumerable as part of the action (.ToList())
- Buffer the response body -https://github.com/aspnet/BasicMiddleware/tree/dev/src/Microsoft.AspNetCore.Buffering Obviously both of these things require more server-side resources, which is why we don't have this kind of behavior by default.
我可以确认这个解决方案有效:
Microsoft.AspNetCore.Buffering
包app.UseMvc()
之前写上app.UseResponseBuffering()
关于c# - 如果在迭代 IEnumerable 时出现异常(从 Controller 返回),AspNet.Core 将返回 200 OK and invalid Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55279248/
我将 aspnetboilerplate/aspnetzero 模板用于具有多数据库的 Multi-Tenancy SaaS 应用程序。这使用 CaSTLeWindsor 作为 DI 框架。 我遇到了
在我的应用程序中,我安装了以下两个 nuget 包: Microsoft.AspNet.Cors - 5.2.2 Microsoft.AspNet.WebApi.Cors - 5.2.2 我的应用程序
我有一个 aspnet core web api 项目,可以通过发布向导将其部署到 Azure 应用服务。但后来我在普通的 aspnet web api(.Net Framework 4.6 上的 M
2015 年 11 月 20 日更新 如何针对使用旧成员(member)提供程序存储用户的数据库进行身份验证? (aspnet_* 表)知道这个数据库被其他应用程序使用,所以我没有迁移(或更改)数据库
我正在使用最新的 VS2015 社区和 ASP.NET 5 等构建 AngularJS 单页应用程序... 我现在在尝试实现身份验证时遇到的问题是我需要使用这两个命名空间: Microsoft.Asp
这两个库有什么区别: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization/1.1.0 https://www.nuget.
如果我使用安装的 Nuget 包 Microsoft.AspNet.FriendlyUrls v 1.0.2 和 Microsoft.AspNet.Identity v.1.0.0. 从 jQuery
我们在 ASP.NET 5 中进行身份验证时遇到了麻烦。In this security sample ,我们看到了这种东西: app.Run(async context => { va
背景:我们正在进行的项目包含多个共享两个库的解决方案。今天一切都是用 .NET Framework 4.6.1 编写的。该项目的目标是为新项目采用 .NET Core 并能够在 Docker 中运行
我正在使用带有 OData 端点的 Web API 和 Entity Framework 创建一个 RESTful 服务。 Microsoft.AspNet.WebApi.OData 和 Micros
在 VS 2015 中,升级 NuGet 包后,我收到以下警告: Dependency specified was Microsoft.AspNet.Mvc >= 6.0.0-beta6 but en
作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本。
研究身份提供者的概念证明,需要帮助理解 aspnet 身份的一些细微差别,特别是与用户声明相关的。 我想要完成的事情: 1) 公开一个 MVC 应用程序,该应用程序提供对 2 个微服务之一的安全访问,
我正在尝试使用一些非常标准的算法来解密字符串。 public static string DecryptString(string cipherText) { string keyString
我知道这取决于项目,但我想了解典型的 asp.net 核心项目是否有通用做法(例如忽略 node_modules)。 最佳答案 截至 2020 年,您应该使用 dotnet new gitignore
1. 加入dll文件这是必须的。 2.拖入控件到应用位置,添加引用: 引用: <%@ Register Assembly="AspNetPage
为什么 mvc 5 中包含身份验证过滤器? mvc 5 中的身份验证过滤器和授权过滤器之间的主要区别是什么? 最佳答案 我找到了以下博文:ASP.NET MVC 5 Authentication Fi
我正在尝试遵循一些过时的 AspNet Core 1.1 教程项目 (虽然我使用的是 Visual Studio 2019 预览版 2.0, 和 .net core v3.0.0-preview9 安
如果我使用本地 Web 服务器进行开发,我可以在不安装 IIS 的情况下从命令行使用实用程序 aspnet_compiler 编译网站项目 (3.5) 吗? 谢谢 最佳答案 是的你可以。您必须指定将在
我有一个.NET Core 2 Web应用程序,并且我想使用ASP.NET Identity来验证我的用户。在.NET Core 1.x上,我的代码运行正常。 我迁移到.NET Core 2,并且在V
我是一名优秀的程序员,十分优秀!