asp.net - 读取 HttpRequest.InputStream 后,第一个请求因 HTTP 400(错误请求)而失败

标签 asp.net http iis

我开发了一个 asmx 网络服务(即 ASP.NET 2.0)。

有一段代码可以在处理它时读取 HTTP 请求的内容(通过 HttpContext.Current.Request.InputStream)。我意识到对于一个请求 InputStream 可能只被读取一次,我确保我永远不会尝试读取它超过一次。

问题似乎是,如果 InputStream 恰好在应用程序生命周期的早期阶段被读取(例如,在 pskill w3wp 之后,在 Application_Start 期间),HTTP 请求将失败并显示 HTTP 400 - 错误请求错误,没有给出解释,没有抛出异常,也没有在 httperr 日志中记录。如果稍后读取它(例如在 web 方法本身中),无论 InputStream 是否被读取,请求都可以正常运行。如果未读取 InputStream,Application_Start 运行正常。

这是某种 ASP.NET 错误吗? IIS错误?还是我胆敢阅读 InputStream 做错了什么?如果是这样,是否有另一种方法可以在不影响 IIS/ASP.NET 内部工作的情况下查看请求的“原始”内容?

简而言之,在 Application_Start 中添加此代码足以重现此错误:

using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
    reader.ReadToEnd();

最佳答案

找不到在 Application_Start 期间读取请求内容而不干扰 ASP.NET/IIS 内部工作的方法。相反,最终确保在 Application_Start 结束之前不会发生这种情况(并且从 Application_End 开始的那一刻起也不会发生,这也被证明是有问题的创建了访问冲突)。

关于asp.net - 读取 HttpRequest.InputStream 后,第一个请求因 HTTP 400(错误请求)而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008360/

相关文章:

javascript - DRYing JSON 有什么众所周知的方法吗

html - CSS 偶尔不会加载

visual-studio - w3wp 进程只显示 ID 不显示名称

c# - RestClient - 请求返回 500 内部服务器错误(内容为 html)并且没有 ErrorMessage

c# - 如何让 ScriptManager 与 ScriptmanagerProxy 一起工作

.htaccess - 将 https ://www. example.com 重定向到 https ://example. com

http - 反向代理背后的 WebDAV

c# - 在 .Net 4.5 中混合使用 Forms 和 Windows 身份验证

jquery - 如何在不同 jquery ui 选项卡中的 gridviews 中使用 jquery Datatable 插件?

asp.net - 独立的 ASP.Net Core 应用程序无法在 Mac 上运行