我正在开发一个Silverlight项目。 当我将jpg图片保存到内存流中以保存它时 进入Context.InputStream,它工作正常。 我正在调用一个aspx页面,它将上传文件串入服务器。
但是,当上传完成或失败时,我无法执行“response.redirect”或“server.transfer”。 是因为我使用WebClient从Silverlight调用我的aspx页面?
请在下面的Silverlight中找到代码:
private void UploadFile(string fileName, Stream data){
UriBuilder ub = new UriBuilder("http://localhost:52544/WebForm1.aspx");
//add a parameter filename into the queryString
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);
}
在aspx页面上,我有这段代码
protected void Page_Load(object sender, EventArgs e)
{
try
{
// get the filename
string filename = Request.QueryString["filename"].ToString();
// create a file on the server dir
using (FileStream fs = File.Create(Server.MapPath("~/AppData/" + filename)))
{
SaveFile(Request.InputStream, fs);
}
Response.Redirect("uploadOk.aspx", true);
}
catch (Exception ex)
{
}
}
private bool SaveFile(Stream stream, FileStream fs)
{
bool isSaved = true;
byte[] buffer = new byte[4096];
int bytesRead;
try
{
// copy the stream into the file
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
fs.Write(buffer, 0, bytesRead);
}
isSaved = true;
}
catch (Exception e)
{
isSaved = false;
}
return isSaved;
}
}
我也尝试过response.redirection(“uploadOk.aspx”,false),但它无效。 我得到以下异常“[System.Threading.ThreadAbortException] = {无法评估 表达式,因为代码已优化或本机框架位于调用堆栈之上。}“
您是否知道如何使用WebClient进行重定向?
提前谢谢
答案 0 :(得分:0)
我认为您的问题是上传失败但因为它位于不同的线程上,SL不会显示正确的错误。尝试添加代码以在错误发生时记录错误并查看错误。您也可以在服务器上执行此操作。
我怀疑问题是标题已写入,因此无法重定向。
尝试这个,因为我认为问题是100-continue:
c.Headers.Add( HttpRequestHeader.KeepAlive, "false");
c.Headers.Add(HttpRequestHeader.Expect, "");