对整个网站使用 ASHX 是个坏主意吗?

Is it a bad idea to use ASHX for an entire website?

我过去使用 HTML 或 Perl 制作过多个网站。我现在希望使用 ASP.Net,因为它允许我使用一种我更熟悉的语言 (C#)。

我用 aspx 页面做了一些实验,从我目前的理解来看,它们似乎总是添加视图状态并向服务器添加额外的请求。

我只是在寻找能够像任何普通网页一样使用 POST/GET 数据的东西 + 能够使用 c#。

目前,我正在考虑使用 ashx 格式制作整个网站,因为它似乎是最接近满足这些需求的格式。这意味着我可能需要创建一个自定义模板管理器来打印静态 html 内容和生成内容的混合。

这听起来像是一个糟糕的方法吗?如果我已经使用 POST/GET 请求处理所有事情,我不需要一个系统 (aspx) 来增加我的页面的重量并减慢进程 no?

ASHX 基本上是处理程序页面。在充满 Web 表单的站点中,ASHX 通常用于一次性 JS 调用、图像处理程序,或者基本上填补您通常不会创建完整 ASPX 的利基市场。

根据您的描述,您的目标是创建轻量级页面,您可以在其中进行更多控制,听起来您需要的是 ASP.NET MVC

此外,根据您的实际操作,您应该查看 ASP.NET 网页的 MVC。如果您只是创建一个 API,请改为查看 ASP.NET WebAPIs。两种范式彼此非常相似,为您处理大量管理工作并且不被视为遗留(截至撰写本文时为止)

更直接地回答您的问题 - 将 ASHX 用于您需要赞美其他东西的一些端点可能并不完全糟糕,但随着应用程序范围的增加,它肯定会变得糟糕添加越来越多的页面。你最终会得到一个整体的 'page' 结构,在整个项目中重复自身,这可能不利于维护;而使用 MVC 方法,您至少会拥有用于某些质量控制和分离的结构。 ASP.NET MVC 已经为您提供了分离、模板和对页面的控制,因此非常适合。

tl;dr - 是的,这是个坏主意。

I made some experiments with the aspx pages and it seems like they always add viewstates and add an extra request to the server from my current understandings.

我在大 ASP.NET 时代做的第一件事就是关掉那些垃圾。

I am just looking to have something that will have the ability to use POST/GET data like any ordinary webpage + the ability to use c#.

我推荐 ASP.NET MVC。

Currently, I am thinking about making the entire website using the ashx format since it seems like the format that is the closest to fullfill these needs. This would imply that I would probably need to create a custom template manager to print mix of static html content and generated content.

有时 ashx 都可以正常工作。有时 IHttpHandler 的实现工作得很好,并且在某些情况下(尤其是当输出不是 HTML 时),代码更简单并且更有效 运行.

否则,虽然 ASP.NET MVC 存在一些问题(事实上,它只是考虑与实体流向客户端相关的所有事项,因为 "the view" 妨碍了调整实体到客户端的流),它很好地分离了 C# 部分和 HTML 部分。事实上,当我在 ASP.NET "wrong" 中不使用 ViewState 时,我违背了关于 "meant to" 如何做 ASP.NET 的书本建议], 我正在做 ASP.NET MVC with Razor 现在直接支持的事情。

I don't need a system (aspx) that will add weight to my pages and slow down the process if I already handle everything using POST/GET requests no?

不,您也不需要 ASP.NET MVC 为您提供的功能,但它在避免干扰方面做得相当不错。事实上,我发现 ASHX 对我来说介于两个凳子之间;在有意义的情况下,我经常发现仅实现 IHttpHandler 更方便,但 YMMV 在这一点上。

  • 视图状态

    • WebForms 中,这是它处理持久性的一种方式
    • 它可以完全或选择性地禁用(例如 一些 控件的持久性,而不是 Page 中的 所有
  • ASP.Net是

    • 网络表单
    • 网页(轻量级,Razor 语法 - 通常WebMatrix 的使用相关)
    • MVC
    • WebApi

所以你有选择。

I am just looking to have something that will have the ability to use POST/GET data like any ordinary webpage + the ability to use c#.

如果您是 "bare metal" 类型,那么 WebPagesMVC 会很有吸引力。并不是说你不能在 WebForms 中做同样的事情——它在一天结束时仍然是 POST/GET(只是为了便于使用而有些抽象)。

其他答案处理 Generic Handler (ashx) 和 WebApi 之间的选择。

Hth.