private Task OnActionExecutedAsyncCore(
     HttpActionExecutedContext actionExecutedContext,
     CancellationToken cancellationToken,
     [CallerMemberName] string methodName = null
     )
 {
     return(_traceWriter.TraceBeginEndAsync(
                actionExecutedContext.Request,
                TraceCategories.FiltersCategory,
                TraceLevel.Info,
                _innerFilter.GetType().Name,
                methodName,
                beginTrace: (tr) =>
     {
         tr.Message = Error.Format(
             SRResources.TraceActionFilterMessage,
             FormattingUtilities.ActionDescriptorToString(
                 actionExecutedContext.ActionContext.ActionDescriptor
                 )
             );
         tr.Exception = actionExecutedContext.Exception;
         HttpResponseMessage response = actionExecutedContext.Response;
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     },
                execute: async() =>
     {
         await _innerFilter.OnActionExecutedAsync(
             actionExecutedContext,
             cancellationToken
             );
     },
                endTrace: (tr) =>
     {
         tr.Exception = actionExecutedContext.Exception;
         HttpResponseMessage response = actionExecutedContext.Response;
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     },
                errorTrace: (tr) =>
     {
         HttpResponseMessage response = actionExecutedContext.Response;
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     }
                ));
 }
Beispiel #2
0
 public Task <CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request)
 {
     return(_traceWriter.TraceBeginEndAsync <CorsPolicy>(
                request,
                TraceCategories.CorsCategory,
                TraceLevel.Info,
                _innerPolicyProvider.GetType().Name,
                MethodName,
                beginTrace: (tr) =>
     {
         tr.Message = String.Format(CultureInfo.CurrentCulture, SRResources.TraceCorsRequestContext, request.GetCorsRequestContext());
     },
                execute: () => _innerPolicyProvider.GetCorsPolicyAsync(request),
                endTrace: (tr, policy) =>
     {
         if (policy != null)
         {
             tr.Message = String.Format(CultureInfo.CurrentCulture, SRResources.TraceEndPolicyReturned, policy);
         }
         else
         {
             tr.Message = SRResources.TraceEndNoPolicyReturned;
         }
     },
                errorTrace: null));
 }
        public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            return(_traceWriter.TraceBeginEndAsync(
                       actionContext.Request,
                       TraceCategories.ModelBindingCategory,
                       TraceLevel.Info,
                       _innerBinding.GetType().Name,
                       ExecuteBindingAsyncMethodName,
                       beginTrace: (tr) =>
            {
                tr.Message = Error.Format(SRResources.TraceBeginParameterBind,
                                          _innerBinding.Descriptor.ParameterName);
            },

                       execute: () => _innerBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken),

                       endTrace: (tr) =>
            {
                string parameterName = _innerBinding.Descriptor.ParameterName;
                tr.Message = actionContext.ActionArguments.ContainsKey(parameterName)
                                    ? Error.Format(SRResources.TraceEndParameterBind, parameterName,
                                                   FormattingUtilities.ValueToString(actionContext.ActionArguments[parameterName], CultureInfo.CurrentCulture))
                                    : Error.Format(SRResources.TraceEndParameterBindNoBind,
                                                   parameterName);
            },
                       errorTrace: null));
        }
        Task <HttpResponseMessage> IHttpActionInvoker.InvokeActionAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            if (actionContext == null)
            {
                throw new ArgumentNullException("actionContext");
            }

            return(_traceWriter.TraceBeginEndAsync <HttpResponseMessage>(
                       actionContext.ControllerContext.Request,
                       TraceCategories.ActionCategory,
                       TraceLevel.Info,
                       _innerInvoker.GetType().Name,
                       InvokeActionAsyncMethodName,

                       beginTrace: (tr) =>
            {
                tr.Message = Error.Format(
                    SRResources.TraceActionInvokeMessage,
                    FormattingUtilities.ActionInvokeToString(actionContext));
            },

                       execute: () => (Task <HttpResponseMessage>)_innerInvoker.InvokeActionAsync(actionContext, cancellationToken),

                       endTrace: (tr, result) =>
            {
                HttpResponseMessage response = result;
                if (response != null)
                {
                    tr.Status = response.StatusCode;
                }
            },

                       errorTrace: null));
        }
 public override Task ExecuteBindingAsync(Controllers.HttpActionContext actionContext, CancellationToken cancellationToken)
 {
     return(_traceWriter.TraceBeginEndAsync(
                actionContext.ControllerContext.Request,
                TraceCategories.ModelBindingCategory,
                TraceLevel.Info,
                _innerBinding.GetType().Name,
                ExecuteBindingAsyncMethodName,
                beginTrace: null,
                execute: () => _innerBinding.ExecuteBindingAsync(actionContext, cancellationToken),
                endTrace: (tr) =>
     {
         if (!actionContext.ModelState.IsValid)
         {
             tr.Message = Error.Format(SRResources.TraceModelStateInvalidMessage,
                                       FormattingUtilities.ModelStateToString(
                                           actionContext.ModelState));
         }
         else
         {
             if (actionContext.ActionDescriptor.GetParameters().Count > 0)
             {
                 tr.Message = Error.Format(SRResources.TraceValidModelState,
                                           FormattingUtilities.ActionArgumentsToString(
                                               actionContext.ActionArguments));
             }
         }
     },
                errorTrace: null));
 }
Beispiel #6
0
 Task <HttpResponseMessage> IHttpController.ExecuteAsync(
     HttpControllerContext controllerContext,
     CancellationToken cancellationToken
     )
 {
     return(_traceWriter.TraceBeginEndAsync <HttpResponseMessage>(
                controllerContext.Request,
                TraceCategories.ControllersCategory,
                TraceLevel.Info,
                _innerController.GetType().Name,
                ExecuteAsyncMethodName,
                beginTrace: null,
                execute: () =>
     {
         // Critical to allow wrapped controller to have itself in ControllerContext
         controllerContext.Controller = ActualController(controllerContext.Controller);
         return ExecuteAsyncCore(controllerContext, cancellationToken);
     },
                endTrace: (tr, response) =>
     {
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     },
                errorTrace: null
                ));
 }
Beispiel #7
0
        protected override Task <HttpResponseMessage> SendAsync(
            HttpRequestMessage request,
            CancellationToken cancellationToken
            )
        {
            return(_traceWriter.TraceBeginEndAsync <HttpResponseMessage>(
                       request,
                       TraceCategories.RequestCategory,
                       TraceLevel.Info,
                       String.Empty,
                       String.Empty,
                       beginTrace: (tr) =>
            {
                tr.Message =
                    request.RequestUri == null
                            ? SRResources.TraceNoneObjectMessage
                            : request.RequestUri.ToString();
            },
                       execute: () => base.SendAsync(request, cancellationToken),
                       endTrace: (tr, response) =>
            {
                MediaTypeHeaderValue contentType =
                    response == null
                            ? null
                            : response.Content == null
                                ? null
                                : response.Content.Headers.ContentType;

                long?contentLength =
                    response == null
                            ? null
                            : response.Content == null
                                ? null
                                : response.Content.Headers.ContentLength;

                if (response != null)
                {
                    tr.Status = response.StatusCode;
                }

                tr.Message = Error.Format(
                    SRResources.TraceRequestCompleteMessage,
                    contentType == null
                          ? SRResources.TraceNoneObjectMessage
                          : contentType.ToString(),
                    contentLength.HasValue
                          ? contentLength.Value.ToString(CultureInfo.CurrentCulture)
                          : SRResources.TraceUnknownMessage
                    );
            },
                       errorTrace: null
                       ));
        }
 private Task OnExceptionAsyncCore(
     HttpActionExecutedContext actionExecutedContext,
     CancellationToken cancellationToken,
     [CallerMemberName] string methodName = null
     )
 {
     return(_traceStore.TraceBeginEndAsync(
                actionExecutedContext.Request,
                TraceCategories.FiltersCategory,
                TraceLevel.Info,
                _innerFilter.GetType().Name,
                methodName,
                beginTrace: (tr) =>
     {
         HttpResponseMessage response = actionExecutedContext.Response;
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     },
                execute: async() =>
     {
         await _innerFilter.OnExceptionAsync(actionExecutedContext, cancellationToken);
     },
                endTrace: (tr) =>
     {
         Exception returnedException = actionExecutedContext.Exception;
         tr.Level = returnedException == null ? TraceLevel.Info : TraceLevel.Error;
         tr.Exception = returnedException;
         HttpResponseMessage response = actionExecutedContext.Response;
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     },
                errorTrace: (tr) =>
     {
         HttpResponseMessage response = actionExecutedContext.Response;
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     }
                ));
 }
Beispiel #9
0
 protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
 {
     return(_traceWriter.TraceBeginEndAsync <HttpResponseMessage>(
                request,
                TraceCategories.MessageHandlersCategory,
                TraceLevel.Info,
                _innerHandler.GetType().Name,
                SendAsyncMethodName,
                beginTrace: null,
                execute: () => base.SendAsync(request, cancellationToken),
                endTrace: (tr, response) =>
     {
         if (response != null)
         {
             tr.Status = response.StatusCode;
         }
     },
                errorTrace: null));
 }
Beispiel #10
0
        Task <HttpResponseMessage> IHttpController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
        {
            return(_traceWriter.TraceBeginEndAsync <HttpResponseMessage>(
                       controllerContext.Request,
                       TraceCategories.ControllersCategory,
                       TraceLevel.Info,
                       _innerController.GetType().Name,
                       ExecuteAsyncMethodName,
                       beginTrace: null,
                       execute: () =>
            {
                // Critical to allow wrapped controller to have itself in ControllerContext
                controllerContext.Controller = ActualController(controllerContext.Controller);
                return _innerController.ExecuteAsync(controllerContext, cancellationToken)
                .Finally(() =>
                {
                    IDisposable disposable = _innerController as IDisposable;

                    if (disposable != null)
                    {
                        // Need to remove the original controller from the disposables list, if it's
                        // there, and put ourselves in there instead, so we can trace the dispose.
                        // This currently knows a little too much about how RegisterForDispose works,
                        // but that's unavoidable unless we want to offer UnregisterForDispose.
                        IList <IDisposable> disposables;
                        if (_request.Properties.TryGetValue(HttpPropertyKeys.DisposableRequestResourcesKey, out disposables))
                        {
                            disposables.Remove(disposable);
                            disposables.Add(this);
                        }
                    }
                });
            },
                       endTrace: (tr, response) =>
            {
                if (response != null)
                {
                    tr.Status = response.StatusCode;
                }
            },
                       errorTrace: null));
        }
 public override Task <object> ExecuteAsync(
     HttpControllerContext controllerContext,
     IDictionary <string, object> arguments,
     CancellationToken cancellationToken
     )
 {
     return(_traceWriter.TraceBeginEndAsync <object>(
                controllerContext.Request,
                TraceCategories.ActionCategory,
                TraceLevel.Info,
                _innerDescriptor.GetType().Name,
                ExecuteMethodName,
                beginTrace: (tr) =>
     {
         tr.Message = Error.Format(
             SRResources.TraceInvokingAction,
             FormattingUtilities.ActionInvokeToString(ActionName, arguments)
             );
     },
                execute: () =>
     {
         return _innerDescriptor.ExecuteAsync(
             controllerContext,
             arguments,
             cancellationToken
             );
     },
                endTrace: (tr, value) =>
     {
         tr.Message = Error.Format(
             SRResources.TraceActionReturnValue,
             FormattingUtilities.ValueToString(value, CultureInfo.CurrentCulture)
             );
     },
                errorTrace: null
                ));
 }