为什么 Glimpse 使用 HTTP 处理程序而不是 MVC 控制器?

Why does Glimpse use an HTTP Handler instead of an MVC Controller?

我一直在构建一个 Web 分析组件,我想将其打包为 NuGet 包。它有一个 JavaScript 跟踪器将信息发送到的端点,很像 Google 分析,还有一个用于查看结果的仪表板。

我将 Glimpse 作为如何构建可重用 ASP.Net 组件的示例。 Glimpse 功能通过 Glimpse.axd HttpHandler 端点提供。我想知道为什么要采用这种方法?如果它只需要支持 ASP.Net MVC,那么只使用 MVC 或 Web API 控制器是否更有意义?

编辑:说明这是机制,而不是我很好奇的简单 .axd 扩展名。

.axd 是识别 Http Handlers 的扩展。处理程序负责处理请求并为特定内容类型生成响应。 Http Handlers 属于 ASP.NET 平台,该平台包含 MVC、Web 窗体和网页。

Glimpse inspects web requests as they happen, providing insights and tooling that reduce debugging time and empower every developer to improve their web applications.

我认为您或多或少已经通过陈述

提供了问题的答案

If it only needed to support ASP.Net MVC, would it make more sense to just use an MVC or Web API controller

从这个角度来看,使用 IHttpHandler 方法似乎合乎逻辑,因为它是 ASP.NET 上不同 Web 框架 运行 的最低公分母之一,无需考虑对这些框架的特定依赖。这样,您还可以防止将这些框架的使用强加给您的用户,尤其是在他们不使用它们的情况下。 Glimpse 有一个插件模型,允许添加特定于这些 Web 框架的其他功能,但这是用户必须做出的决定。

作为旁注,Glimpse HttpHandler 仅提供 Glimpse 相关资源(可通过 Glimpse.axd 访问的配置页面,但也提供 Glimpse 客户端脚本、图像、对存储数据的访问.. .).在 Glimpse IHttpHandler 旁边还有一个 Glimpse IHttpModule 负责将 GlimpseRuntime 挂钩到 [=38= 中,它是 Glimpse 的核心,完成所有繁重的工作] 运行时。

所以基本上 IHttpHandlerIHttpModule 实现只是 GlimpseRuntime 的适配器以使其与 ASP.NET 一起工作,Glimpse 也有实现 运行关于 OWIN、南希、...

使用 IHttpHandlerIHttpModule 的另一个优势是 安装 Glimpse NuGet 包,然后就可以 运行 Glimpse 的方法,它仅通过在 web.config 中注册 HTTP 处理程序和 HTTP 模块来使 Glimpse 可用,没有额外的麻烦,例如需要注册的路由以使 Glimpse 控制器可访问等......所有这些很容易与托管应用程序定义的其他路由发生冲突,...

TL;DR: 尝试提供你的可重用组件,至少是它的核心,对 web 框架等的依赖最少......,你总是可以提供额外的如果它们添加仅适用于这些框架的附加功能,则依赖于这些 Web 框架的包。但是,如果您的可重用组件是 ASP.NET MVC 特定组件,那么这可能是您的共同点,请记住,在那一刻,您已经限制了您的组件在其他框架中的使用(这可能完全可以接受)