When searching google the only solutions for this come up for MVC websites. My asp.net 4.0 site is not MVC. I want requests for sitemap.xml to load another dynamic .aspx page so I can generate links for google on the fly.
I have spent hours searching, please if you know where I can find the answer, let me know.
I have tried using
RouteTable.Routes.Add("SitemapRoute", new Route("sitemap.xml", new PageRouteHandler("~/sitemap.aspx")))
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Your code is correct, and should be placed in the Application_Start method in Global.asax. For example:
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new Route(
"sitemap.xml", new PageRouteHandler("~/sitemap.aspx")));
}
However, you also need to make sure that *.xml files are handled by ASP.NET. By default, *.xml files will just be served up by IIS and not processed by ASP.NET. To make sure they are processed by ASP.NET, you can either:
1) Specify runAllManagedModulesForAllRequests="true" on the system.webServer element in your web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
or 2) add a “Handler Mapping” for .xml files:
<system.webServer>
<handlers>
<add name="xml-file-handler" path="*.xml" type="System.Web.UI.PageHandlerFactory"
verb="*" />
</handlers>
</system.webServer>
I tested this in a sample ASP.NET (non-MVC) project and was able to get the routing to work as you specified.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0