Lee*_*app 5 asp.net asp.net-mvc asp.net-mvc-3
我想我可能已经发现ASP.NET MVC的问题和它的事件管道.特别是,我发现Session_Start被多次调用,每个都包含一个新的SessionID.
这是一步一步的过程:
添加以下方法(是的它是空的):
protected void Session_Start(){}
在方法中设置断点
我在标准的ASP.NET Web应用程序(而不是MVC)上尝试了同样的事情,而Session_Start只触发了一次.
我很确定我在这里做错了,因为我正在使用默认的项目模板,并且唯一被修改的代码是Global.asax.cs文件,以添加Session_Start方法.
我正在使用IIS Express,但我使用"Cassini"Web服务器(Visual Studio Development Server)重复了上述步骤,结果相同.
有什么建议?
我决定在调试会话期间使用Fiddler检查HTTP流量.看起来:
我记下了生成的三个SessionID中的每一个,并且看起来浏览器所持有的是第一个.因此,当我们进入上面的第6步,并且一切似乎都有效时,它实际上使用了生成的第一个SessionID.
所以......我决定主持一个"favicon.ico"文件.我将ico文件放在项目的根目录中,然后再次启动我的调试会话.这次,Session_Start只触发一次."/favicon.ico"成功送达(200).
所以...我猜它在某种意义上的工作方式应该......但为什么调用"/favicon.ico"会触发Session_Start事件???? 我不应该选择不托管图标吗?
ASIDE:我在ASP.NET(而不是mvc)项目中尝试了以上所有内容,并且它没有相同的问题,即使没有由默认的"ASP.NET Web应用程序"项目托管的favicon.ico文件.
小智 5
我还挺有这个问题了一会儿,最后我意识到,这是因为当时正在进行一些HTTP/HTTPS有心计......看起来像它破坏并重新建立会话,如果你翻转SSL围绕这样的,你有
<sessionState mode="InProc" sqlCommandTimeout="3600" timeout="120" cookieless="false" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />
Run Code Online (Sandbox Code Playgroud)
可能是新玩家或真正疲惫且不注意的人的陷阱!:)只是因为这可以帮助任何人...
我想我已经到了这样的地步:我有几个解决方案(尽管对我来说这两个方案都显得“老套”),所以我想我会接受这些并继续前进。
上面 @Tz_ 的评论提到我应该忽略 favicon 文件的路径。这基本上就是我要做的事情。(荣誉@Tz_!)
发现了以下帖子(除其他外)。它描述了一个问题:当浏览器从 ASP.NET MVC 站点请求“/favicon.ico”文件时,MVC 堆栈错误地尝试查找并实例化控制器。我不确定这是否适合我的情况,但答案建议添加以下路由条目:
routes.IgnoreRoute("favicon.ico");
Run Code Online (Sandbox Code Playgroud)
我试了一下(添加了上面的内容),然后就解决了!
所以,我仍然不知道为什么“/favicon.ico”请求在 MVC 中具有错误的身份,但我知道如何在我的情况下修复它。任何一个:
同样,这对我来说似乎都是黑客,因为我认为这是控制器工厂应该能够优雅地处理的事情。恕我直言
| 归档时间: |
|
| 查看次数: |
8826 次 |
| 最近记录: |