为什么WebApi ApiController对象是为每个请求实例化的?

时间:2018-02-15 21:08:24

标签: .net asp.net-web-api asp.net-apicontroller

我们的团队惊讶地发现,我们的ApiController类是针对每个传入请求实例化的。我们团队中的大多数开发人员都希望默认情况下可以跨请求重用控制器实例。*

我们已经搜索了这背后的理由或推理,以便了解重用Controller实例和创建新实例之间可能涉及的权衡,但却没有发现任何具体内容。是否有文件化的参考资料来讨论它?

*我们确实意识到可能有一种方法可以改变行为(使其在请求中重用实例),但这并不是这个问题的主要内容。

1 个答案:

答案 0 :(得分:3)

听起来您想了解有关Web API如何处理请求的更多信息。开始了解请求管道的好地方是this visual overview

在ASP.NET MVC框架发布后的一段时间内发布了ASP.NET Web API。他们都使用类似的管道设计。有意义的是,一开始,他们会有类似的请求处理方法,因为它们最终可能合并为一个管道。

BTW:管道的大多数组件都可以用自定义版本替换。如果您不同意ApiController实施,simply会自动替换默认IHttpControllerTypeResolver

更新:Web API Core具有完全不同的中间件设计,因此 none 适用于该管道。