asp.net-mvc - 当来自 POST 的响应是重定向时,使用 HttpWebRequest 回调的 POST 未触发

标签 asp.net-mvc silverlight http httpwebrequest

我正在尝试从 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.AllowAutoRedirectfalse。默认值为 true

响应返回后,您将负责检查状态代码是 301、302、303 还是 307,检索 Location header 的值,然后自行执行重定向.对于 Silverlight,重定向很可能与页面级导航相关,因此无论如何您都需要手动处理。

关于asp.net-mvc - 当来自 POST 的响应是重定向时,使用 HttpWebRequest 回调的 POST 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162294/

相关文章:

http - LiveHttpHeaders : which cache-control info is right

ruby - 哪个 Ruby Web 服务器?

c# - 在 MVC 中向我的编辑 Controller 添加删除功能

c# - ContentType.Xml 不存在?

c# - 墓碑工作正常,但我的应用程序需要它吗?

java - 通过 Java 网站部署 silverlight 控件

asp.net-mvc - 如何使用ASP.NET MVC设置 Multi-Tenancy 应用程序?

asp.net - 如何以及在何处调用 Database.EnsureCreated 和 Database.Migrate?

visual-studio - Silverlight打印中 "Dialogs must be user-initiated"安全异常的另一个技巧

node.js - 有没有使用http2的类似 "request"的包?