使用 Chrome 时,我对 Silverlight 应用程序中的 WebClient 类有一个奇怪的问题。我可以使用 IE 成功上传文件,但是当我使用 Chrome 时它失败了。当我深入研究它时,我看到 WebClient(或 Chrome,我不知道谁对此负责)在使用 Chrome 时添加“Content-Type:application/x-www-form-urlencoded”标头来请求,但它不是添加到 IE 上。由于该标头,服务器端应用程序抛出以下异常:
System.InvalidOperationException:由于对象的当前状态,操作无效
[InvalidOperationException:由于对象的当前状态,操作无效。]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2420886 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +58
System.Web。 HttpRequest.FillInFormCollection() +159[HttpException (0x80004005): URL 编码的表单数据无效。] System.Web.HttpRequest.FillInFormCollection() +217
System.Web.HttpRequest.get_Form() +104
以下是我在 Silverlight 中使用的代码
![private void UploadFile(string fileName, Stream data)
{
var uri = this.ResolveUri(apiMethod, arguments);
ub.Query = string.Format("filename={0}", fileName);
WebClient c = new WebClient();
c.OpenWriteCompleted += (sender, e) =>
{
PushData(data, e.Result);
e.Result.Close();
data.Close();
};
c.OpenWriteAsync(ub.Uri);
}
private void PushData(Stream input, Stream output)
{
byte\[\] buffer = new byte\[4096\];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
{
output.Write(buffer, 0, bytesRead);
}
}
使用失败的 Chrome 请求:使用成功的 IE 请求: