【问题标题】:Redirect.Response() is dropping query stringsRedirect.Response() 正在删除查询字符串
【发布时间】:2017-08-22 19:03:22
【问题描述】:

我在弄清楚为什么打电话时遇到了问题

Response.Redirect(urlWithQueryParams, false)

urlWithQueryParams 是“localhost/forms/confirmation?form=%7BE92EB767-8BB6-44F1-A4C9-9CDB2C2DBCCC%7D&id=8454DDBC072C49A48AD116019A9D5824&value=gESO%2BDDBGEAA7eZMz2JqHQ%3D%3D”的部分重定向发生。我目前将重定向设置为

Response.Redirect(urlWithQueryParams);

然而,每当用户提交表单并触发重定向时,这样的调用会导致抛出 ThreadAbortAbortException。我发现几个 SO 帖子说要在其中添加错误标志并遵循

HttpContext.Current.ApplicationInstance.CompleteRequest();

但是,每当我添加错误标志时,页面都会重定向到正确的页面,但会沿途丢弃查询参数。用户被重定向到的确认页面需要这些参数才能正确显示,我找不到任何指向此问题原因的内容。有没有其他人遇到过这个问题?

【问题讨论】:

标签: c# asp.net redirect web sitecore


【解决方案1】:

这就是我的做法。

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(); - 可能线程其余部分的一些代码添加了一些东西......

【讨论】:

  • 两个答案都投了反对票,至少说明了如果您中止线程,问题是什么以及问题所在。当您不停止线程时,还要检查安全问题。必须停止运行该页面的线程 - 为什么这样不好?并且线程仅在异常情况下才停止...
  • 如果你真的理解这里的答案,你会发现如果你不停止处理你就会遇到安全问题......stackoverflow.com/questions/14641143/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2011-02-02
相关资源
最近更新 更多