2016-08-09 4 views
0

У меня есть класс logging.cs, который используется в моем проекте WebApi для регистрации информации о входящем запросе.Как получить имя контроллера в запросе WebApi?

Класс запускается из моего метода Application_BeginRequest() в моем Global.asax. Мне нужно получить имя контроллера и заголовок авторизации в запросе. Как сделать ?

Я продолжаю играть с объектом запроса HttpRequest, но я не могу показаться похожим на то, что мне нужно. (Хотя метод запроса Http кажется достаточно простым!)

Для заголовка авторизации я бы подумал, что это будет так же просто, как «Request.Headers [« Авторизация »]; однако это возвращается как null в настоящее время.

Мой код ниже, в любом направлении или совете будет принята с благодарностью.

Джейсон
namespace WCAPI.BLL 
{ 
    public class logging_2 
    { 
     private static HttpRequest Request 
     { 
      get { return HttpContext.Current.Request; } 
     } 

     private static HttpResponse Response 
     { 
      get { return HttpContext.Current.Response; } 
     } 

     public static void LogWcapiRequest(BLL.DebugTmr tmr) 
     { 
      if (tmr.EventType == DebugTmr.EventTypes.Null) { return; } 

      try 
      { 
       Services.AFSILog log = new Services.AFSILog(); 
       log.Level = Services.LogLevels.Info; 
       log.SourceSystem = ANACore.AMTConfig.GetConfigurationValue("ConsoleLogSourceSystem"); 
       if (Request.Url.IsLoopback) { log.SourceSystem += "_" + System.Environment.MachineName; } 
       log.Stamp = DateTime.Now; 
       log.Message = tmr.FormatedMsg; 
       log.Category = tmr.EventType.ToString(); 


       List<Services.LogData> dets = new List<Services.LogData>(); 
       dets.Add(new Services.LogData { DataType = Services.ParameterDataTypes.Int, DataKey = "Duration", DataValue = tmr.ElapsedMs.ToString() }); 

       //This appears to be easy!! 
       var meth = Request.HttpMethod; 
       dets.Add(new Services.LogData { DataType = Services.ParameterDataTypes.Int, DataKey = "Method", DataValue = meth }); 

       //Now how do I get Authorization Header and Controller name ? 


       foreach (BLL.DebugTmr.Waypoint wp in tmr.Waypoints) 
       { 
        dets.Add(new Services.LogData 
        { 
         DataType = Services.ParameterDataTypes.Int, 
         DataKey = wp.Name + "Ms", 
         DataValue = wp.ElapsedMs.ToString() 
        }); 
       } 

       log.Parameters = dets.ToArray(); 
       // This is what actually writes to the log I just need add Authorization header and Controller name to my log object 
       SaveLog(log); 
      } 
      catch (Exception ex) 
      { 
       Debug.Print("Page log create failed : {0}", ex.Message); 
      } 
     } 
    } 
} 
+0

Если вы можете использовать 'HttpContext', вы должны взглянуть на этот вопрос http://stackoverflow.com/questions/5302444/can-i-get-the-controller-from-the-httpcontext – smoksnes

ответ

1

Вы должны осуществить действие фильтра для logging.That образом вы сможете получить доступ к имени контроллера через параметр HttpActionContext

Api Контроллер:

public class LeadsController : ApiController 
{ 
    [Logger] 
    public List<string> Get() 
    { 
     return new List<string> { "Lead 1", "Lead 2", "Lead 3", "Lead 4","Lead 5" }; 
    } 
} 

Фильтр:

public class Logger : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     string controllerName = 
      actionContext.ControllerContext.ControllerDescriptor.ControllerName; 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
    } 
} 

Вы можете украсить каждый метод, требующий регистрации с помощью [Logger], или сделать это на уровне контроллера для регистрации каждого отдельного вызова, который происходит внутри этого контроллера. Вдобавок, вы можете сделать свой фильтр действий глобальным, чтобы он запускался каждый раз, когда любое действие вызывается внутри вашего проекта.

+0

Большое вам спасибо ! У меня есть это, где я могу получить имя контроллера сейчас. Все еще пытаюсь зарегистрировать мой журнал как глобальный фильтр. –

+0

Пожалуйста, не забывайте отмечать как ответ, если это вам помогло –

 Смежные вопросы

  • Нет связанных вопросов^_^