【发布时间】:2016-02-28 16:57:54
【问题描述】:
我有这个自定义路由系统,我可以从中获取路径、控制器、视图和区域我的 DB 并根据请求的路径设置它们。
我现在的问题是,当我尝试访问一个页面时,它给了我too many redirects response。
这方面发生的事情是:
- 用户访问页面并填写表格;
- 使用 AJAX 发布表单,然后使用 jquery 进行重定向;
- 用户预约或生成凭证;
如果用户试图通过在浏览器上键入返回上一页(我没有指向该链接的任何按钮),他会遇到重定向过多的问题。
由于代码有点大,我将在此处发布:http://pastebin.com/yTdWKMp4
我只省略了我的数据库逻辑。
这是怎么回事?我只能看到这个区域的问题,但我不确定其他区域不会发生。
编辑
这些是请求的标头
HTTP/1.1 302 Found
Cache-Control: private, no-store, max-age=1
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Wed, 25 Nov 2015 19:01:23 GMT
Last-Modified: Wed, 25 Nov 2015 19:01:22 GMT
Etag: ""
Location: /teste-lp
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-UA-Compatible: IE=Edge,chrome=1
Date: Wed, 25 Nov 2015 19:01:22 GMT
Content-Length: 115
HTTP/1.1 200 OK
Cache-Control: private, no-store, max-age=1
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Wed, 25 Nov 2015 19:02:10 GMT
Last-Modified: Wed, 25 Nov 2015 19:02:09 GMT
Etag: ""
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-UA-Compatible: IE=Edge,chrome=1
Date: Wed, 25 Nov 2015 19:02:12 GMT
Content-Length: 6852
编辑 2
经过大量调试和记录后,我发现问题的开始,它与某个会话为空时我的重定向有关:
if (TempData["LeadID"] == null || Session["UnidadeCE"] == null)
{
Response.Redirect( HelperMethods.CreateLink( Request.RawUrl.TrimStart( '/' ).Split( '/' )[0] ) );
Response.End();
return null;
}
我在约会和凭证上进行了此验证,如果他尝试重新加载页面,他将被重定向到表单页面。现在奇怪的是,当他更改 URL 时,RouteBase 执行并尝试获取该新 URL 的 PageInfo(VirtualPath,Controller 和 View),并且在我搜索时出于某种原因,我得到的是约会页面而不是表格一,所以我回到同一页面并开始循环。
我已经用过滤和数据库搜索更新了我的 pastebin,我的数据库中没有重复记录。它看起来像是某种怪异的缓存,但 var 是本地的并且没有共享。
编辑 3
在观看了一些 var 之后(我有近 6k 条路由),我发现问题在于我对第 128 行的 pastebin 文件的路由检查,pageList 参数是我缓存中所有路由的列表,我进行了 url 搜索基于然后我采取我需要的路线,在第 167 行是我的问题所在。在那一刻,我已经将我想要的路线的内容复制到我的freakingPage var 中(不是很酷,我知道),然后我更改了Action 和Controller 的值,但也会发生的是值的变化pageList var 以及缓存中的第 203 行。
这可能是什么原因?
【问题讨论】:
-
如果您可以在本地重现问题,Chrome 或 Firefox 中的网络检查器在这里可能会有所帮助。使用它,您可以看到所遵循的实际重定向顺序。
-
我做到了,它提供了很多重定向然后停止,如果您等待几秒钟并重新加载一切都很好,但这总是在您从表格更改到约会区域后发生,因为您可以在我的编辑中看到唯一的区别是在重定向标头中我有一个 Location 属性
标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing