我正在尝试从 Silverlight 调用 POST 操作。我的帖子由 MVC3 Controller 处理,它在处理完 POST 数据后返回一个重定向。我使用 HttpWebRequest 对象,一切正常。
我希望能够在上传大文件时监控和报告 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);
最佳答案
默认情况下,HttpWebRequest
类将自动遵循任何重定向。我将怀疑这是导致问题的原因。
要绕过它,设置 httpWebRequest.AllowAutoRedirect
为 false
。默认值为 true
。
响应返回后,您将负责检查状态代码是 301、302、303 还是 307,检索 Location
header 的值,然后自行执行重定向.对于 Silverlight,重定向很可能与页面级导航相关,因此无论如何您都需要手动处理。
关于asp.net-mvc - 当来自 POST 的响应是重定向时,使用 HttpWebRequest 回调的 POST 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162294/