我们的应用程序的用户在白天至少两秒内下载一个附件.
以前的场景:
我们使用Response.End()在用户下载附件后中止与客户端的连接.由于我们遇到性能问题,我们开始记录异常,其中最重复的一个是线程中止异常.由于我们从Web服务获取附件,我们必须进行一些清理,并且我们在try-catch-finally块中进行了清理.经过一些研究,我已经理解,即使它在finally块中,也不会执行Response.End()之后的任何代码.是对的吗?
目前的情景:
我已经阅读了关于Response.End()的堆栈溢出中的线程是有害的,只有在真正需要它时才需要使用它,所以我决定使用HttpContext ....而不是CompleteRequest().使用此代码,可以完成所需的清理,但渲染的html将附加到下载的附件中.我尝试覆盖同一篇文章中提出的Render和RaisePostBackEvent,但问题仍然存在.有关如何解决此问题的任何想法都会有所帮助.
码:
HttpContext.Current.Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment; filename=" +
filename);
Response.AddHeader("Content-Length", fileContent.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(fileContent);
Response.Flush();
Run Code Online (Sandbox Code Playgroud) 在ASP.NET页面中执行response.redirect时,我收到错误:
错误:无法获取
传入的两个变量的值(一个值从查询字符串检索,另一个从viewstate检索)
我从未见过之前的这个错误,所以我做了一些调查,发现建议使用"endResponse"的"False"值,
例如Response.Redirect("mypage.aspx",False)
这个有效.
我的问题是:在response.redirect中对"endResponse"值使用"False"有什么副作用?
即服务器的缓存有什么影响?页面是否在一段时间内保留在内存中?它会影响查看同一页面的不同用户吗?等等
谢谢!
基于这些问题和那里的答案,我想问一下重定向的正确方法是什么.
使用Redirect(url,endResponse)的默认方式是抛出ThreadAbortException因为endResponse=true调用End()方法而调用,因此,如果在try/catch块中使用它,那么此异常显示在那里并且可以假定为错误,但实际上用户尝试通过停止页面处理的其余部分来重定向到页面.
其他可能的方法是Redirect(url, endResponse)使用endResponse=false以下方法调用with ,HttpContext.Current.ApplicationInstance.CompleteRequest();使用它不会出现任何异常.
所以问题是什么更好用,为什么.
这个主题几乎说明了一切.我有一个必须使用EstateId请求参数调用的EstateReport Web表单.我想返回一个合适的HTTP错误,这个参数我们不存在.如何返回HTTP错误400作为我的回复?
在切线上,如果不存在所需参数,我应该返回错误,我觉得更正确,还是重定向到报告的搜索页面,这更加用户友好?
我有一个页面,我做了一些文件操作,当文件完成后,我需要上传到亚马逊s3.有时文件可能很大,因此提交的用户需要等待太多.我怎么能做出类似的东西
我的代码是这样的
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + "name" + ".pdf");
HttpContext.Current.Response.TransmitFile("~/media/pdf/name.pdf");
HttpContext.Current.Response.End();
if (FileExists("/media/pdf/name.pdf"))
{
System.IO.File.Delete("D:/Projects/09-05-2013/httpdocs/media/pdf/name.pdf");
}
Run Code Online (Sandbox Code Playgroud)
这里我想在浏览器中下载name.pdf,下载后我想删除那个文件。但是代码执行在
HttpContext.Current.Response.End();
Run Code Online (Sandbox Code Playgroud)
执行该行之后没有代码。所以我的删除功能不起作用。这个问题有什么解决办法吗?
我得到了一个"普通"的ascx-Page,其中包含HTML-Parts以及后面的代码.这些元素都应该在正常条件下显示(工作).
现在我希望能够设置一个request-parameter,这会导致页面zu以不同方式呈现.然后,它发送该页面上的信息,不是人类可读的,而是机器:
string jsonProperty = Request["JSonProperty"];
if (!string.IsNullOrEmpty(jsonProperty))
{
Response.Clear();
Response.Write(RenderJSon());
// Response.Close();
return;
Run Code Online (Sandbox Code Playgroud)
此代码位于Page_PreRender内.现在我的问题是:字符串被正确发送到浏览器,但之后仍然呈现"标准"html内容.
当我删除"Response.Close();" 评论我收到"ERR_INVALID_RESPONSE"
有什么线索如何在不创建额外页面的情况下解决这个问题?
我试图将一个新成员插入数据库,当有一个副本catch块时工作正常.但是当有一个新成员时try,catch块和块都会返回它们的消息.这是我的代码.
if (Request["cmd"] == "ins")
{
try{
mydb db = new mydb();
member newm = new member()
{
Id = Request["uid"],
Name = Request["uname"]
};
db.AddTomembers(newm);
db.SaveChanges();
Response.Write("ok");
Response.End();
}
catch(Exception s) {
Response.Write(s);
Response.End();
}
}
Run Code Online (Sandbox Code Playgroud)