【问题标题】:Custom 404 page and Invalid Viewstate errors自定义 404 页面和无效的 Viewstate 错误
【发布时间】:2011-06-04 00:02:31
【问题描述】:

众所周知,ASP.NET 应用程序似乎总是抛出一些 Invalid Viewstate 错误,但现在我实际上找到了一种在我的站点上重现错误的方法。

发生的情况是用户试图访问一个不存在的页面,而我做了一个:

    if (CurrentItem == null) {
        throw new HttpException(404, "Page not found");
    }

这会将用户重定向到我们的自定义 404 页面。这个 404 页面只是我们系统中的一个常规页面,我们通过 web.config 重定向到它。搜索功能在此页面上可见。但是当我从这个页面进行回发时,错误似乎发生了。所以如果你去例如。

http://alternativeto.net/software/doesntexist

然后使用右上角的搜索表单并输入例如 Dropbox,按回车键(如果您收到自动建议,请不要点击它,因为它只会将您链接到该应用程序)然后 baam,您会得到错误是“无效的 Viewstate”bla bla。

有人知道我该如何解决这个问题吗?是因为我如何抛出 404 错误吗?我可以想象它与重定向到自定义 404 页面有关,并且 viewstate 和 asp.net 魔术在某种程度上处于某种无效状态?也许我可以更改我的 web.config 中的某些内容来纠正这个问题?

感谢我能得到的任何帮助!当然是想摆脱尽可能多的错误:)

更新

好像是我自己解决的。当 MS 出现该安全错误时,他们建议将错误重定向更改为 redirectMode="ResponseRewrite",而我将其更改为 redirectMode="ResponseRedirect" 似乎工作正常!

更新 2

但我也意识到我更愿意使用 ResponseRewrite 解决方案,因为它会保留在出现错误的那个 URL 上,这样会更干净。所以我仍然很乐意找到一个适用于 ResponseRewrite 的解决方案。

【问题讨论】:

    标签: asp.net postback viewstate webforms


    【解决方案1】:

    我有同样的问题,我相信这是因为在 <httpErrors> 中使用 responseMode="ExecuteURL 使用 Server.Transfer 这就是为什么 url 不会从例如/contact/404

    这意味着主窗体上的操作将保持为/contact 并将回发到该页面,但由于我们已转移到/404.aspx,它将抛出无效的视图状态。

    我的解决方案是将预渲染 404 和 500 页面的表单操作设置为请求的路径而不是 RawUrl。

    protected void Page_PreRender(object sender, EventArgs e)
    {
        var form = (HtmlForm)this.Master.FindControl("Form1");
        if (form != null)
            form.Action = Request.Path;
    }
    

    尽管这个问题已经很老了,但我不得不发布这个问题,因为它可能会在未来为某人节省几个小时的头痛。

    【讨论】:

      【解决方案2】:

      搜索框应始终使用 GET,而不是 POST (!!)。所以不要使用回发来搜索,用表单 method="get" action="searchpage" 装饰你的文本框,你就可以回家了,所有的访问者都会更开心

      【讨论】:

      • 啊,这可能是个好建议。无论如何,我正在使用查询字符串进行重定向,因此无论如何这当然是一个更有效的解决方案。但是当涉及到这些东西时,ASP.NET 有点奇怪,因为整个页面都是一个很大的表单。所以必须用 Javascript 或我想的东西做点什么。
      猜你喜欢
      • 2016-04-25
      • 2013-09-16
      • 2017-10-18
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多