2012-03-29 81 views
0

在以前的版本中,你可以做以下的的WebAPI的:ASP.NET MVC 4的WebAPI条件MessageHandlers

RouteTable.Routes.MapServiceRoute<UserService>("1.0/User/", defaultWebApiConfiguration); 
RouteTable.Routes.MapServiceRoute<SomeOtherService>("1.0/SomeOtherService/", largeFilesConfig); 

这将让你有不同的服务不同的消息处理程序。这显然是不可能的,在新的框架:ASP.NET MVC 4 WebApi Support For Multiple HttpConfigurations

或者我有项目,我在WebApiConfiguration编辑RequestHandlers添加处理程序,如果某些属性存在这样的:

该代码是基于: http://haacked.com/archive/2011/10/19/implementing-an-authorization-attribute-for-wcf-web-api.aspx。这是不可能的,因为MessageHandlersHttpConfiguration是不可设置的。

总而言之,我的问题是如何指定某些消息处理程序仅适用于某些ApiController服务而不是全部这些服务。看起来,ASP.NET MVC 4 WebApi框架已经过度简化了Web Api Beta的功能和可配置性。

+0

如果您是自主主机,则可以创建多个服务。目前在Web主机中没有办法。 – 2012-03-29 02:59:02

回答

0

在新的Web API中实现此功能的推荐方法是使用操作筛选器属性。尽管您使用了一组新的基类来实现它们,但它们的工作方式与MVC中的几乎相同。最简单的方法是从ActionFilterAttribute派生。

+0

是的。我熟悉actionfilters,但在我的一个案例中,我有一个消息处理程序,它也称为ContinueWith,因此流程是调用消息处理程序,然后是实际服务,然后是消息处理程序。关于这一点很酷的是我能够将变量从入口消息处理函数传递给出口消息处理函数。这不适用于OnActionExecuting和OnActionExecuted,因为您无法将执行变量从执行功能传递到执行功能。 – 2012-03-29 06:31:28

+0

看起来像ActionArguments可能是一个解决方案。 – 2012-03-29 06:37:15

+2

@nextgenneo ActionArguments是将传递到action方法的参数。不要使用它。相反,使用'HttpRequestMessage.Properties'。 – marcind 2012-03-29 16:32:58