拦截对象到达控制器

时间:2015-06-10 14:44:52

标签: c# asp.net asp.net-web-api asp.net-web-api2

我有一个带有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);

任何想法我该怎么做?

2 个答案:

答案 0 :(得分:1)

是的,可以在请求完成后在Web代理中完成 或者您也可以在管道中添加一些中间件。但是如果我理解你的话,你也可以通过自定义绑定器简单地无需处理程序,这将改变你的Message对象。

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

答案 1 :(得分:1)

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

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