我想通过自定义HttpHandler处理对我的应用程序“http://example.com/whateverpath”的请求,但返回的东西取决于“whateverpath”的值。
因此,访问“http://example.com/path1”的用户将获得与访问“http://example.com/path2”的用户不同的响应,但这两个请求必须在同一个HttpHandler中处理。想法是在数据库中找到“无论什么路径”,并根据结果返回响应内容。
我听说过URL路由,我已经有了一个自定义的Http处理程序,但是我可以将这两种技术结合起来得到我需要的东西吗?
对于这个问题,我将不胜感激。
干杯 弗兰克阿贝尔
答案 0 :(得分:4)
因此,您有一个实现名为IHttpHandler
的{{1}}的类,并且它位于名称空间MyHandler
中,您需要在网站的Example
中进行以下输入httpHandlers部分:
Web.Config
由于这会将您的网站/应用程序的所有URL重定向到处理程序,因此您必须考虑如何提供静态内容(imgs,脚本,样式表等)。一种方法是将此类静态内容存储在一致的URL中,例如<httpHandlers>
<add verb="*" path="*" type="Example.MyHandler"/>
</httpHandlers>
,然后您可以将处理程序设置为:
http://example.com/static/...
对于您的本地开发者网络服务器(嵌入在Visual Studio中),这就是所需要的。对于IIS,您还需要告诉IIS如何处理这些URL(因为服务器首先分析请求以决定将其发送到何处 - 包括是否将其发送到ASP.NET或其他扩展)。
现在,IIS和ASP.NET都知道如何处理您的URL。
上述方法意味着在请求静态文件时,ASP.NET实际上是在提供文件,而不是IIS - 这会导致一些缺点(讨论here)。您可以通过将目录切换到应用程序(在IIS管理器中),删除通配符映射语句(上面添加)并将其从应用程序切换回来覆盖此行为(从静态目录禁用通配符映射)。 Voilà - 静态文件由IIS处理而不会破坏您的ASP.NET。
答案 1 :(得分:0)
我不建议组合URL路由和HTTP处理程序。
这似乎是URL路由的完美工作。但是,我不会为它使用HTTP处理程序。
只需将“〜/ CustomData / whateverpath”映射到ASPX页面即可。然后让页面加载数据库中的数据。毕竟,如果查询数据的逻辑是相同的,无论“无论什么路径”是什么,你都不想为每个变化重复你的逻辑。相反,您希望将其映射到单个文件,该文件将为所有情况加载正确的数据。
HTTP处理程序是完全不同的事情,不应该用于此目的。 (顺便说一下,我刚刚发表了一篇关于HTTP处理程序的文章。你可以在http://www.blackbeltcoder.com/Articles/asp/writing-a-custom-http-handler-in-asp-net查看它。)
答案 2 :(得分:0)
首先,我同意Jonathan Wood的上一篇文章,在HttpHandler中使用路由并不是一个好主意。但我很确定他指的是那里的标准MVC路由。
一种好的方法是使用自定义路由。我发表了一篇关于它的文章 - Basic Routing for HttpHandler