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
eineoverride
? Wenn es nicht zu überschreiben einer Basisklasse die Methode dann nichts wird jemals wissen, es zu nennen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie
HttpActionContext
für die Web-Api unterSystem.Web.Http.Filters
namespace:Bitte beachten Sie auch
override
hier