拦截对象到达Controller

Intercept object arrives Controller

我有一个带有 GET/POST 方法的控制器,我想知道是否可以在到达控制器上的 POST 方法之前拦截对象。

这是我在 Controller 上的方法:

[Route("{type}")]
[HttpPost]
public HttpResponseMessage Save(string type, [FromBody] Message message)
{
    ....
    return Request.CreateResponse((HttpStatusCode)200, result);
}

是否可以在调用方法Save() 之前拦截对象Message?我创建了一个 DelegatingHandler,但它不起作用。

这是我添加路线的方式:

IHttpRoute route = GlobalConfiguration.Configuration.Routes.CreateRoute(
 routeTemplate: "api/message/{type}",
 defaults: new HttpRouteValueDictionary("route"),
 constraints: null,
 dataTokens: null,
 handler: new ValidationHandler());
GlobalConfiguration.Configuration.Routes.Add("MyRoute", route);

有什么办法吗?

是的,可以在发出请求后在 Web 代理中完成 或者您也可以在管道中添加一些中间件。但是,如果我理解正确,您也可以在没有处理程序的情况下通过自定义活页夹简单地完成它,这将更改您的 Message 对象。

How to bind to custom objects in action signatures in MVC/WebAPI

如果您已经创建了 DelegatingHandler,则需要按如下方式配置它:

GlobalConfiguration.Configuration
                  .MessageHandlers
                  .Add(new FooHandler());