मुझे @André Scartezini के उत्तर का पालन करने दें और मैंने लिखा एक नमूना कोड जोड़ें।
यह वेब एपीआई विधि में स्वचालित रूप से पोस्ट किए गए डेटा को लॉग इन करने के लिए एक एक्शनफ़िल्टर है। यह नौकरी करने का सबसे अच्छा समाधान नहीं है बल्कि यह दिखाने के लिए एक नमूना कोड है कि मॉडल को एक्शनफिल्टर विशेषता के अंदर से कैसे पहुंचाया जाए।
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);
}
}
}
और यह है कि यह कैसे उपयोग करने के लिए है:
// POST: api/myapi
[LogPostData]
public void Post(MyEntity myEntity)
{
// Your code here
}
filterContext.ActionParameters – Felix
बहुत बढ़िया है, धन्यवाद! – NullReference
एमवीसी 5 फ़िल्टरकॉन्टेक्स्ट.एक्शन पैरामीटर में फ़िल्टर बन गया है Context.ActionDescriptor.GetParameters() (System.Web.Mvc.ParameterDescriptor की एक सरणी देता है) –