我有一个使用[HttpGet]的公共ASP.NET MVC操作,如下所示:
[HttpGet]
public ActionResult List(OrganizationFilterModel p_model) {
...
}
如果用户请求没有有效用户会话的页面,我们会将其重定向到登录页面。登录后,登录系统会将它们重定向到最初请求的URL。
在此页面上,在某些情况下,从登录系统重定向到原始网址会导致抛出异常:
在控制器“MyApp.Controllers.OrganizationController”上找不到公共操作方法“List”。但是,如果我只是重新请求页面,它会成功显示所有后续请求。
条件和其他说明:
[HttpGet]
可解决问题。 [即使失败的请求是GET ] 在这些条件下,[HttpGet]
过滤器的存在会阻止MVC查找操作,但仅限于第一个请求。所有后续请求都可以正常工作。
Fiddler显示以下模式:
摘要: [HttpGet]
过滤器阻止定位操作,但仅限于第一个请求,尽管它是 GET请求。
发生了什么事?
更新 要添加一些其他信息:
[Authorize]
属性。我们在OnActionExecuting
中有自定义代码,如果请求经过身份验证但没有有效会话,则会强制登录。 (我们实际上只是将FormsAuth用于一些静态便捷方法和配置设置)由于删除FormsAuth可以解决问题,而且我们希望暂时解决这个问题,因此我不再需要进行故障排除。我真的很想知道这是否是FormsAuth + MVC [或FormsAuth + Routing]中的缺陷,或者我是否做了一些愚蠢的事情。