Session 在会话超时后执行主干集合.fetch()

Session 在会话超时后执行主干集合.fetch(),session,backbone.js,asp.net-mvc-4,Session,Backbone.js,Asp.net Mvc 4,我已将ASP.NET MVC4子web应用程序添加到现有ASP.NET web表单网站中。整个网站正在使用表单身份验证 在我的MVC4客户端中,我使用Backbone.js构建应用程序,客户端应用程序很可能是SPA 一切正常,但会话超时后,我的应用程序不会重定向到登录页面 我在Collection.fetch方法上尝试了错误回调,它是在会话超时后尝试提取时触发的(这很好) 但是,响应状态代码为200(OK),响应内容为登录页面内容 所以,我的问题是,在错误处理程序中,我如何知道回调是由会话超时还

我已将ASP.NET MVC4子web应用程序添加到现有ASP.NET web表单网站中。整个网站正在使用
表单身份验证

在我的MVC4客户端中,我使用
Backbone.js
构建应用程序,客户端应用程序很可能是SPA

一切正常,但会话超时后,我的应用程序不会重定向到登录页面

我在Collection.fetch方法上尝试了错误回调,它是在会话超时后尝试提取时触发的(这很好)

但是,响应状态代码为200(OK),响应内容为登录页面内容

所以,我的问题是,在错误处理程序中,我如何知道回调是由会话超时还是任何其他意外错误触发的

如果确定了,我应该如何让主干网在引用当前页面时将页面重定向到登录页面?

是Phil Haack在博客中提到的内容

除职务外:

可能的解决方案

我将介绍一些我在网络上看到的可能的解决方案,然后介绍我更喜欢的解决方案。这并不是说这些其他解决方案是错误的,但它们只在某些情况下是正确的

删除表单身份验证

如果您不需要FormsAuth,一个简单的解决方案是按照建议删除forms身份验证模块。如果您的唯一目的是使用ASP.NET托管Web API服务,并且不需要表单身份验证,那么这是一个很好的解决方案。但如果你的应用程序既是一个web应用程序又是一个web服务,那么这不是一个很好的解决方案

注册HttpModule以将重定向转换为401

建议注册一个HTTP模块,将任何302请求转换为401请求。这种方法有两个问题。首先,它打破了重定向合法而不是FormsAuth结果的情况。第二,它需要手动配置HttpModule

安装程序包MembershipService.Mvc

我的同事Steve Sanderson对他的MembershipService.Mvc和MembershipService.WebForms NuGet软件包有更好的方法。这些包将ASP.NET成员身份公开为一项服务,您可以从多个设备调用该服务

此博客评论中的更多信息


我们也有同样的问题。但是我们所做的,是连接到AuthenticateRequest(就像您所做的那样),我们还检查了请求,看看它是否是ajax(同样,就像您所做的那样)。但此时,我们只返回一个类似JSON的
{location:'http://www.domain.com/path-to-login-page“}
我们只是用HTTP代码200结束了该方法中的响应。这样,jQuery仍然会得到一个JSON结果。但如果结果具有“location”属性,我们只需执行客户端重定向到登录页面。这是我们的方式,效果很好。

感谢您的详细回答和选择,我将尝试您的建议,并找到适合我的建议,如果有任何发现,我将在此处更新。