如何在继承自ApiController的类中保持变量,并从ExceptionFilterAttribute

时间:2018-03-13 20:59:49

标签: c# asp.net-web-api action-filter exceptionfilterattribute

我有我的控制器SomeController,其继承自ApiController,我也有ActionFilter

一个FilterConfig

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //filters.Add(new HandleErrorAttribute());
            GlobalConfiguration.Configuration.Filters.Add(new LogExceptionFilterAttribute());
        }
    }

ErrorLogService

public static class ErrorLogService
    {
        public static void LogError(Exception ex, string metodo, string clase)
        {
            Utilidades.EnviarErrorHTTP(ex, null, metodo, clase);
        }
    }

LogExceptionFilterAttribute

public class LogExceptionFilterAttribute : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext context)
        {            
            //TODO
        }
    }

嗯,会话由ApiController处理,在SomeController我可以使用它:

var session = TokenUser;

但是,ErrorLogService中没有任何内容可以调用该函数来识别令牌。

如果每个会话中的变量不同,有没有办法分享这个变量? (TokenUser是一个对象)。

1 个答案:

答案 0 :(得分:0)

我找到了办法。

Global.asax 中,您必须添加下一个代码:

protected void Application_PostAuthorizeRequest()
        {
            System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
        }

现在,您可以使用Session

var session = System.Web.HttpContext.Current.Session;
session["token"] = sesion;

变量session将在应用程序中保留。