2017-08-22 133 views
1

我有一个问题弄清楚为什么叫Redirect.Response()被丢弃查询字符串

Response.Redirect(urlWithQueryParams, false) 

其中urlWithQueryParams是“本地主机/表格/确认?形式=%7BE92EB767-8BB6-44F1-A4C9- 9CDB2C2DBCCC%7D & id = 8454DDBC072C49A48AD116019A9D5824 & value = gESO%2BDDBGEAA7eZMz2JqHQ%3D%3D“正在丢弃重定向发生时属于url一部分的所有查询参数。我现在有重定向设置为

Response.Redirect(urlWithQueryParams); 

但是,调用就像是造成ThreadAbortAbortException每当用户提交表单和重定向被触发被抛出。我发现一对夫妇一个SO帖子说要增加在那里的假标记并遵循

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

但每当我添加了假标志,页面重定向到正确的页面,但下降沿的查询参数办法。用户被重定向到的确认页面需要这些参数才能正确显示,并且找不到指向此问题原因的任何内容。有没有人遇到过这个问题?

+0

请创建一个[最小,完整的和可验证的例子](https://stackoverflow.com/help/mcve)。我们会更容易帮助你。 – mscheker

+0

@mscheker使它更短,更重要!希望有帮助。 – themillennialdev

回答

0

这是我这样做的方式。

try 
{ 
    // this is throw the ThreadAbortException exception 
    Response.Redirect(stringUrl, true); 
} 
catch (ThreadAbortException) 
{ 
    // ignore it because we know that comes from the redirect 
} 
catch (Exception x) 
{ 
    // log the error 
} 

我在这里解释一下为什么Redirect to a page with endResponse to true VS CompleteRequest and security thread

总之,异常,因为你停止页面的处理是正常的,我们希望这样做的原因有两个。 1)为了安全,2)只是停止其余的不需要的CPU处理。

也是为什么你失去了你的查询字符串,因为endResponse只是它的奇特的“结尾”,呼吁AbortCurrentThread();的处理 - 可能在线程的其余部分代码是添加的东西...

+0

这两个答案都有两个否定的投票,至少说明了为什么以及如果中止一个线程会出现什么问题。当您不停止线程时,请检查安全问题。运行页面的线程必须停止 - 为什么那么糟糕?并且该线程仅仅被异常终止... – Aristos

+0

如果你真的明白了答案,你会发现如果你不停止处理你有安全问题... https://stackoverflow.com/questions/14641143/redirect-到一个页面与 - endresponse到真-VS-completerequest和安全,THRE/14641145#14641145 – Aristos