我想通过自定义 HttpHandler 处理对我的应用程序“http://example.com/whateverpath”的请求,但返回的内容取决于“whateverpath”的值。
因此,访问“http://example.com/path1”的用户将得到与访问“http://example.com/path2”的用户不同的响应,但两个请求必须在同一个 HttpHandler 中处理。这个想法是在数据库中查找“whateverpath”,并根据结果返回响应内容。
我听说过 URL 路由,并且我已经有一个正在运行的自定义 Http 处理程序,但是我可以结合这两种技术来获得我需要的功能吗?
我将不胜感激任何尊重这个问题的评论。
干杯
弗兰克·阿贝尔
所以你有一个实现的类IHttpHandler
称为:MyHandler
它在命名空间中Example
,您需要在网站的Web.Config
in the http处理程序 http://msdn.microsoft.com/en-us/library/bya7fh0a%28v=VS.80%29.aspx部分:
<httpHandlers>
<add verb="*" path="*" type="Example.MyHandler"/>
</httpHandlers>
由于这会将您网站/应用程序的所有 URL 重定向到您的处理程序,因此您必须考虑如何提供静态内容(imgs、脚本、样式表等)。一种方法是将此类静态内容存储在一致的 URL 中,例如http://example.com/static/...
,然后您可以这样设置处理程序:
<httpHandlers>
<add verb="*" path="*" type="Example.MyHandler"/>
<add verb="GET,HEAD" path="static/*" type="System.Web.StaticFileHandler" />
</httpHandlers>
对于您的本地开发网络服务器(嵌入在 Visual Studio 中),这就是所需要的。对于 IIS,您还需要告诉 IIS 如何处理这些 URL(因为服务器首先分析请求以决定将其发送到何处 - 包括是否将其发送到 ASP.NET 或其他一些扩展)。
- 打开:IIS管理器->
- 部分:网站 ->
- 右键单击您的网站 ->
- 选项:属性->
- 选项卡:主目录->
- 按钮:[配置...] ->
- 选项卡:映射 ->
- 部分:“通配符应用程序映射(执行顺序):”->
- 按钮:[插入...] ->
- 可执行文件:“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”(或处理程序使用的 .NET 运行时版本)->
- 取消选中“验证该文件存在”->
- 按钮:[确定]
现在 IIS 和 ASP.NET 都知道如何处理您的 URL。
上述方法意味着当请求静态文件时,ASP.NET 实际上是在提供文件服务,而不是 IIS - 这会导致一些缺点(已讨论)here http://bytes.com/topic/asp-net/answers/553719-system-web-staticfilehandler-has-limit)。您可以通过将目录切换到应用程序(在 IIS 管理器中)、删除通配符映射语句(上面添加)并将其从应用程序切换回来来覆盖此行为(禁用静态目录中的通配符映射)。 Voilà - 静态文件由 IIS 处理,而不会困扰您的 ASP.NET。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)