WebApi benutzerdefinierte Filter

Entwickle ich ein log tha speichern alle Anfragen an eine db.
ich erstellt einen benutzerdefinierten filter und registriert es, aber es wird nicht aufgerufen werden, wenn ich den Antrag für die controller.

hier ist der LogFilter.cs

 public class LogFilter : System.Web.Http.Filters.FilterAttribute, IFilter
{
    public void OnActionExecuting(ActionExecutedContext filterContext)
    {
        try
        {
            string entity = "";
            using (StreamReader sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
            {
                entity = sr.ReadToEnd();
            }

            logModel.RequestLog rl = new logModel.RequestLog();
            rl.IP = filterContext.HttpContext.Request.UserHostAddress;
            rl.Type = filterContext.Controller.ControllerContext.RouteData.Values["controller"].ToString().ToUpper();
            rl.URL = filterContext.HttpContext.Request.Url.OriginalString;
            rl.Operation = filterContext.HttpContext.Request.HttpMethod;
            rl.RequestDate = DateTime.Now;
            if (!string.IsNullOrEmpty(entity))
                rl.Entity = entity;

            filterContext.HttpContext.Request.Cookies.Add(new HttpCookie("reqID", new deviceLog.RequestLog().Add(rl).ID.ToString()));
        }
        catch { }
    }

Global.asax

 protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);


        WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters);
    }

WebApiConfig.cs

 public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: DEFAULT_API_NAME,
            routeTemplate: DEFAULT_API_ROUTE,
            defaults: new
            {
                parameter1st = RouteParameter.Optional,
                parameter2nd = RouteParameter.Optional,
                parameter3rd = RouteParameter.Optional
            }
        );

        //remove support for xml
        config.Formatters.Remove(config.Formatters.XmlFormatter);

        //force json indentation
        config.Formatters.JsonFormatter.Indent = true;
    }
    public static void RegisterGlobalFilters(System.Web.Http.Filters.HttpFilterCollection filters)
    {
        filters.Add(new LogFilter());
    }
  • Sollte nicht die OnActionExecuting eine override? Wenn es nicht zu überschreiben einer Basisklasse die Methode dann nichts wird jemals wissen, es zu nennen.
InformationsquelleAutor Robson Gmack | 2015-09-01
Schreibe einen Kommentar