我有我的本地IIS中的網站。 該網站的應用程序池處於Clasic模式。ASP.NET MVC路由,TransferRequestHandler不與ClassicMode與IIS工作
我正在將文件的路徑映射到MVC上的路徑。
我有路徑登記這樣
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.RouteExistingFiles = true;
routes.MapRoute(
name: "XMLPath",
url: "sitemapindex.xml",
defaults: new { controller = "Home", action = "Html", page = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
在我的控制器我有這樣的方法
public FileResult Html()
{
var stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
stringBuilder.AppendLine("<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">");
stringBuilder.AppendLine("<sitemap>");
stringBuilder.AppendLine("<loc>http://[site]/sitemaps/sitemap_01.xml</loc>");
stringBuilder.AppendLine("<lastmod>" + DateTime.Now.ToString("MMMM-dd-yyyy HH:mm:ss tt") + "</lastmod>");
stringBuilder.AppendLine("</sitemap>");
stringBuilder.AppendLine("<sitemap>");
stringBuilder.AppendLine("<loc>http://[site]/sitemaps/sitemap_02.xml</loc>");
stringBuilder.AppendLine("<lastmod>" + DateTime.Now.ToString("MMMM-dd-yyyy HH:mm:ss tt") + "</lastmod>");
stringBuilder.AppendLine("</sitemap>");
stringBuilder.AppendLine("</sitemapindex>");
var ms = new MemoryStream(Encoding.ASCII.GetBytes(stringBuilder.ToString()));
Response.AppendHeader("Content-Disposition", "inline;filename=sitemapindex.xml");
return new FileStreamResult(ms, "text/xml");
}
在我web.cong我添加
<handlers>
<add name="HtmlFileHandler" path="*.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="classicMode,runtimeVersionv4.0" />
</handlers></system.webServer>
<runtime>
唯一的區別是使用preCondition =「classicMode,runtimeVersionv4.0」not preCondition =「integratedMode,runtimeVersionv4.0」。
如果我在Visual Studio 2013中運行項目工作完美,但是當我在IIS中運行它時不起作用。如果我更改我的IIS的AppPool以集成模式工作。 但我需要在經典模式下擁有AppPool。
當我運行路線(URL)[現場] /sitemapindex.xml在經典模式我得到這個錯誤:
HTTP錯誤500.21 - 內部服務器錯誤 處理程序「HtmlFileHandler」有一個壞模塊「ManagedPipelineHandler」在其模塊列表中
這是我使用的Example Project。 如何在IIS網站的classicMode中使用System.Web.Handlers.TransferRequestHandler?