我们在ASP中使用数据表。Net MVC和身份框架。我使用下面的代码将身份验证超时设置为1分钟:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
...
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = System.TimeSpan.FromMinutes(1),
Provider = new CookieAuthenticationProvider
{
...
});
然后登录并转到具有数据表的页面并等待超时。如果超时过期并且数据表试图访问服务器,则会发生错误。数据表通过向服务器发出ajax请求来工作,这就是错误的来源。
JavaScript错误:
DataTables警告:table id=DataTables_Table_0 -无效的JSON响应。有关此错误的详细信息,请参阅http://datatables.net/tn/1
我需要优雅地处理这个问题,并将用户重定向到登录页面。
有人能帮忙吗?
您始终可以在Global.asax
文件中使用Application_Error
事件处理程序。添加:
protected void Application_Error(object sender, EventArgs e)
{
//Redirect code here
}
方法,并加载代码以检查登录是否有效。如果没有,您可以将它们路由到另一个页面。在我的一个项目中,我使用RouteData
类将它们发送到另一个页面:
//send to the error page
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (!userAuthorized)
routeData.Values.Add("action", "NotAuthorized");
else
routeData.Values.Add("action", "Index");
routeData.Values.Add("message", exception.Message);
IController errorController = new DevWebApp.Controllers.ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
。. NET有一个内置的超时异常:
try
{
// your logic here that might time out
}
catch (TimeoutException e)
{
// your logic here if it does time out
}
: https://msdn.microsoft.com/en-us/library/system.timeoutexception (v = vs.110) . aspx
编辑:对于AJAX超时,也许这个线程会有所帮助?
处理ajax调用中的会话超时