我想从Silverlight调用POST操作。我的文章是由一个MVC3控制器处理的,该控制器在完成处理POST数据后返回一个重定向。我使用HttpWebRequest对象,一切正常。POST使用HttpWebRequest回调不会触发POST时的响应是重定向
我希望能够在上载大文件时监视和报告POST的进度。我已经开始实施代码here的变体。
我将request.AllowWriteStreamBuffering设置为false时发生问题。我的异步回调方法从未被解雇。
如果我将POST处理程序更改为不返回重定向,则所有事情都按预期工作。
有没有人有任何想法如何解决这个问题?
这里是我的代码
var request = (HttpWebRequest) WebRequestCreator.ClientHttp.Create(new
Uri("http://localhost:3399/items/upload"));
request.Method = "POST";
string boundary = "---------------" + DateTime.Now.Ticks;
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.AllowWriteStreamBuffering = false;
request.ContentLength = CalculatePostLength();
request.BeginGetRequestStream(asyncResult =>
{
Stream stream = request.EndGetRequestStream(asyncResult);
var writer = new StreamWriter(stream);
//Write filename
writer.WriteLine(boundarySeparator);
writer.WriteLine(nameheader);
writer.WriteLine();
writer.WriteLine(title);
//Write file
writer.WriteLine(boundarySeparator);
writer.WriteLine(fileHeader);
writer.WriteLine(contentType);
writer.WriteLine(contentLength);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
Stream input = fileToUpload.OpenRead();
var buffer = new byte[4096];
for (int size = input.Read(buffer, 0, buffer.Length);
size > 0;
size = input.Read(buffer, 0, buffer.Length))
{
output.Write(buffer, 0, size);
}
output.Flush();
writer.WriteLine();
writer.WriteLine(boundaryCompleter);
writer.Flush();
stream.Close();
request.BeginGetResponse(ReadHttpResponseCallback, request);
}, request);
您是否尝试过使用浏览器HTTP堆栈而不是客户端堆栈?在SL4中有一个开放的bug。 – jv42 2011-11-03 13:47:08