Déjame seguir la respuesta de @André Scartezini y agregar un código de muestra que escribí.
Es un ActionFilter para registrar automáticamente los datos publicados en un método Web API. No es la mejor solución para hacer el trabajo, sino solo un código de muestra para mostrar cómo acceder al modelo desde dentro de un atributo de ActionFilter.
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
namespace LazyDIinWebApi.Models
{
public class LogPostDataAttribute : ActionFilterAttribute
{
public override async Task OnActionExecutingAsync(
HttpActionContext actionContext,
CancellationToken cancellationToken)
{
Collection<HttpParameterDescriptor> parameters
= actionContext.ActionDescriptor.GetParameters();
HttpParameterDescriptor parameter
= parameters == null ? null : parameters.FirstOrDefault();
if (parameter != null)
{
string parameterName = parameter.ParameterName;
Type parameterType = parameter.ParameterType;
object parameterValue =
actionContext.ActionArguments == null && !actionContext.ActionArguments.Any() ?
null :
actionContext.ActionArguments.First().Value;
string logMessage =
string.Format("Parameter {0} (Type: {1}) with value of '{2}'"
, parameterName, parameterType.FullName, parameterValue ?? "/null/");
// use any logging framework, async is better!
System.Diagnostics.Trace.Write(logMessage);
}
base.OnActionExecuting(actionContext);
}
}
}
Y esto es cómo usarlo:
// POST: api/myapi
[LogPostData]
public void Post(MyEntity myEntity)
{
// Your code here
}
filterContext.ActionParameters – Felix
impresionante, gracias! – NullReference
En MVC5 filterContext.ActionParameters se ha convertido en filterContext.ActionDescriptor.GetParameters() (devuelve una matriz de System.Web.Mvc.ParameterDescriptor) –