C# 从StreamReader确定内容?

C# 从StreamReader确定内容?,c#,stream,io,.net,C#,Stream,Io,.net,我被迫使用一个蹩脚的第三方API,其中与返回类型不一致。因此,我提交一个编程web请求,抓取流,底层内容可能是一条错误消息(更糟糕的是,它可能是原始文本,也可能是它们返回的xml),或者它返回一个二进制文件。我无法知道任何给定请求的预期格式,因此我需要一种在运行时进行反思的方法 我应该如何着手解决这个问题?这条流是不可查找的,所以我只能阅读它。我通常不尝试在流控制中使用异常处理,但这似乎是最好的处理方法。始终将其视为预期的二进制文件类型,如果出现任何异常,则捕获异常并尝试提取错误消息。我想到的一

我被迫使用一个蹩脚的第三方API,其中与返回类型不一致。因此,我提交一个编程web请求,抓取流,底层内容可能是一条错误消息(更糟糕的是,它可能是原始文本,也可能是它们返回的xml),或者它返回一个二进制文件。我无法知道任何给定请求的预期格式,因此我需要一种在运行时进行反思的方法


我应该如何着手解决这个问题?这条流是不可查找的,所以我只能阅读它。我通常不尝试在流控制中使用异常处理,但这似乎是最好的处理方法。始终将其视为预期的二进制文件类型,如果出现任何异常,则捕获异常并尝试提取错误消息。我想到的一件事是检查流中的前x个字节数。如果第一位是格式良好的xml,那么它可能是xml。问题是试图确定原始文本和二进制之间的差异。

Q:你能至少打开前256个字节(或者说,只打开前四个字节)吗?然后返回并处理整个流(基于你在“标题”中找到的内容)?如果这个第三方API是公开的,请命名它,这样我就永远不会使用它。不,Paul,由于它是不可查找的,它是只向前和只读的,所以我所能做的最好的事情就是将第一个kb读入缓冲区,然后丢弃流,然后检查缓冲区并尝试找出它是什么,然后如果它的二进制内容是什么,就重新发出请求。但每次都是双重要求,我觉得还是让它吹吧up@snappymcsnap不需要这样做-您只需缓冲一些,找出您想要的,然后从缓冲区和流进行处理。因为你无论如何都不需要分块处理它,这没有什么不同。当然,另一个选择是将流写入临时文件,然后处理文件(可查看)。前几个字节可以是BOM表。。。而仅仅识别XML只是处理任意数据的一小部分