指定ASP.NET Http Handler的确切路径

Ale*_*ork 4 asp.net web-config httphandler

我使用Http Handler动态生成XML/Google站点地图,因此我不需要手动维护XML文件.

我已将我的Http Handler映射到我的web.config中的"sitemap.xml",如下所示:

<httpHandlers>
  <add verb="*" path="sitemap.xml" type="My.Name.Space, MyAssembly" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

它工作得很好.现在,www.mywebsite.com/sitemap.xml将我的Http Handler设置为动作并完全按照我的意愿行事.但是,这个URL会做同样的事情:www.mywebsite.com/some/folder/sitemap.xml我真的不想要那个,即我只是想将我的处理程序映射到我的应用程序的根目录.

我已经尝试将我的web.config中处理程序的"路径"更改为"/sitemap.xml"和"〜/ sitemap.xml",但都不起作用.

我在这里错过了什么吗?

Ali*_*zmi 5

尝试将以下内容添加到web.config中

<urlMappings enabled="true">
    <add url="~/SiteMap.xml" mappedUrl="~/MyHandler.ashx"/>
</urlMappings>
Run Code Online (Sandbox Code Playgroud)

这使用了一个名为"Url Mapping"的ASP.NET 2.0的一个鲜为人知的功能.

  • 您可以在Web应用程序中创建一个ashx文件,指向另一个程序集中的处理程序,如下所示:<%@ WebHandler Language ="C#"Class ="MyHandlersNamespace.MyHandler,MyHandler"%>这里我指的是另一个程序集中的处理程序称为'MyHandlers' (2认同)

Kir*_*tan 0

2个解决方案:

Soln #1:您可以使用Request.Url属性检查请求路径,如果请求来自根路径,则可以生成XML,否则不执行任何操作。

解决方案 #2:将具有以下设置的 web.config 文件放入您不想处理 sitemap.xml 文件请求的每个文件夹中。