asp.net自定义HttpHandler和URL路由

gsi*_*ank 6 url routing httphandler

我想通过自定义HttpHandler处理对我的应用程序"http://example.com/whateverpath"的请求,但返回的东西取决于"whateverpath"的值.

因此,访问"http://example.com/path1"的用户将获得与访问"http://example.com/path2"的用户不同的响应,但这两个请求必须在同一个HttpHandler中处理.想法是在数据库中找到"无论什么路径",并根据结果返回响应内容.

我听说过URL路由,我已经有了一个自定义的Http处理程序,但是我可以将这两种技术结合起来得到我需要的东西吗?

对于这个问题,我将不胜感激.

干杯弗兰克阿贝尔

Rud*_*udu 4

IHttpHandler因此,您有一个实现名为:的类,MyHandler并且它位于名称空间中,您需要在站点的httpHandlersExample部分中添加以下条目:Web.Config

\n\n
<httpHandlers>\n  <add verb="*" path="*" type="Example.MyHandler"/>\n</httpHandlers>\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于这会将您的网站/应用程序的所有 URL 重定向到您的处理程序,因此您必须考虑如何提供静态内容(imgs、脚本、样式表等)。一种方法是将此类静态内容存储在一致的 URL 中http://example.com/static/...,例如 ,然后您可以这样设置处理程序:

\n\n
<httpHandlers>\n  <add verb="*" path="*" type="Example.MyHandler"/>\n  <add verb="GET,HEAD" path="static/*" type="System.Web.StaticFileHandler" />\n</httpHandlers>\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于您的本地开发网络服务器(嵌入在 Visual Studio 中),这就是所需要的。对于 IIS,您还需要告诉 IIS 如何处理这些 URL(因为服务器首先分析请求以决定将其发送到何处 - 包括是否将其发送到 ASP.NET 或其他一些扩展)。

\n\n
    \n
  • 打开:IIS管理器->
  • \n
  • 部分:网站 ->
  • \n
  • 右键单击您的网站 ->
  • \n
  • 选项:属性->
  • \n
  • 选项卡:主页目录 ->
  • \n
  • 按钮:[配置...] ->
  • \n
  • 选项卡:映射 ->
  • \n
  • 部分:“通配符应用程序映射(执行顺序):”->
  • \n
  • 按钮:[插入...] ->
  • \n
  • 可执行文件:“C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll”(或您的处理程序使用的 .NET 运行时版本)->
  • \n
  • 取消选中“验证该文件存在”->
  • \n
  • 按钮:[确定]
  • \n
\n\n

现在 IIS 和 ASP.NET 都知道如何处理您的 URL。

\n\n

上述方法意味着当请求静态文件时,ASP.NET 实际上是在提供文件服务,而不是 IIS - 这会导致一些缺点(此处讨论)。您可以通过将目录切换到应用程序(在 IIS 管理器中)、删除通配符映射语句(上面添加)并将其从应用程序切换回来来覆盖此行为(禁用静态目录中的通配符映射)。Voil\xc3\xa0 - 静态文件由 IIS 处理,不会打扰您的 ASP.NET。

\n