我们需要对移动设备发送的大量http请求进行分块。这些较小的块流合并到服务器上的文件中。一旦收到所有块,我们需要一种方法将保存的合并请求提交给将处理此大型http请求的同一控制器中的另一个方法(Action)。如何才能做到这一点?我们在下面尝试的代码导致服务挂起。有没有办法在没有往返的情况下这样做?
//Open merged chunked file
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
//Read steam support variables
int bytesRead = 0;
byte[] buffer = new byte[1024];
//Build New Web Request. The target Action is called "Upload", this method we are in is called "UploadChunk"
HttpWebRequest webRequest;
webRequest = (HttpWebRequest)WebRequest.Create(Request.Url.ToString().Replace("Chunk", string.Empty));
webRequest.Method = "POST";
webRequest.ContentType = "text/xml";
webRequest.KeepAlive = true;
webRequest.Timeout = 600000;
webRequest.ReadWriteTimeout = 600000;
webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream webStream = webRequest.GetRequestStream(); //Hangs here, no errors, just hangs
我已经研究过使用RedirectToAction和RedirecctToRoute,但是这些方法不适合我们要做的事情,因为我们无法编辑Request.InputStream(因为它是只读的)来执行大量的请求流。 / p>
答案 0 :(得分:1)
您可以构建自己想要的内容,保存在TempData,RedirectToAction中,并将其从“TempData”中删除
类似的东西:
public ActionResult DoSomething()
{
var data = GetData();
TempData["Data"] = data;
RedirectToAction("Forward");
}
public ActionResult Forward()
{
var data = TempData["data"];
if (data == null)
throw new ArgumentException("data is null");
// Do your magic.
}
答案 1 :(得分:0)
找到我要找的东西here:
需要执行以下步骤:
1)创建文件流以从文件
中读取合并的块
2)创建具有目标URI的新System.Net.HttpWebRequest
3)将标题从原始请求复制到2)中注明的新请求
4)将文件流中的内容复制到新请求中
5)将新请求的内容长度设置为文件流的长度
6)关闭文件流和新请求流
7)将标题从原始请求复制到新请求
8)将Cookies从原始请求复制到新请求
所以基本上它与编写ASP.NET东西时可以使用的逻辑相同。