我开发了一个asmx web服务(即ASP.NET 2.0)。在处理过程中,有一段代码可以读取HTTP请求的内容(通过HttpContext.Current.Request.InputStream)。我意识到InputStream只能被读取一次,所以我确保不会尝试多次读取。
问题似乎在于如果在应用程序生命周期的早期阶段(例如在pskill w3wp之后,在Application_Start期间)读取InputStream,则HTTP请求将失败并显示HTTP 400 - Bad Request错误,没有解释,没有抛出异常,并且httperr日志中没有条目。如果稍后读取它(例如在web方法内部),则无论是否读取InputStream,请求都会正常运行。如果未读取InputStream,则Application_Start运行正常。
这是某种ASP.NET bug吗?IIS bug?或者我正在尝试读取InputStream而做错了什么事情?如果是这样,是否有另一种方法来查看请求的“原始”内容,而不会干扰IIS/ASP.NET的内部工作?
简而言之,在Application_Start中添加此代码就足以重现此错误。
问题似乎在于如果在应用程序生命周期的早期阶段(例如在pskill w3wp之后,在Application_Start期间)读取InputStream,则HTTP请求将失败并显示HTTP 400 - Bad Request错误,没有解释,没有抛出异常,并且httperr日志中没有条目。如果稍后读取它(例如在web方法内部),则无论是否读取InputStream,请求都会正常运行。如果未读取InputStream,则Application_Start运行正常。
这是某种ASP.NET bug吗?IIS bug?或者我正在尝试读取InputStream而做错了什么事情?如果是这样,是否有另一种方法来查看请求的“原始”内容,而不会干扰IIS/ASP.NET的内部工作?
简而言之,在Application_Start中添加此代码就足以重现此错误。
using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
reader.ReadToEnd();