C#MVC RouteBase路由太多重定向

时间:2015-11-25 18:54:28

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我有这个自定义路由系统,我将从中获取路径控制器视图区域我的数据库,并根据请求的路径设置它们。

我现在的问题是,当我尝试访问一个页面时,它会给我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参数是我从缓存中所有路由的列表,我做了网址搜索基于然后我采取我需要的路线,在第167行是我的问题所在。那时我已经将我想要的路线内容复制到我的freakingPage var(不太酷,我知道),然后我改变了ActionController的值,但是发生的是pageList var以及Cache的第203行的值更改。

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我发现我的问题与我没有对来自缓存的值使用Clone这一事实有关。由于.NET缓存在获得其值时保留了引用值,因此必须对从中获取的对象实现ICloneable

因为我只是"把"另一个var的值以及稍后编辑这个var我实际上是在更改缓存中的原始值...当我再次点击缓存时,我收到了错误的返回。

在我的情况下,我得到了重定向,因为我在Controller上进行了一些会话验证,第一次(新制作的缓存)我会点击正确的页面。但在我尝试重新进入同一页面之后,我会从中获得不同的价值。

为了纠正它,我在我的模型上实现了ICloneable。如果有人也有这个问题,我也用新方法改变了我的例子。

http://pastebin.com/yTdWKMp4