sitemap.xml网址返回404错误

ste*_*fan 3 asp.net-mvc asp.net-mvc-4

我有一个大型会员营销网站,在Windows Azure上托管了数百万种产品。对于SEO,我必须提供一个动态创建的sitemap.xml。

  public ActionResult SiteMap()
    {
        string sitemapUrl = "https://trendley.blob.core.windows.net/sitemap/sitemap.xml";

        byte[] bImage = null;
        using (WebClient wc = new WebClient())
        {
            bImage = wc.DownloadData(sitemapUrl);
        }
        return File(bImage, "application/octet-stream");
    }
Run Code Online (Sandbox Code Playgroud)

我将以下路由添加到我的RouteConfig中:

   routes.MapRoute("Sitemap",
"sitemap.xml",
new { controller = "Home", action = "Sitemap" });
Run Code Online (Sandbox Code Playgroud)

不幸的是,这没有用。我得到-> HTTP错误404.0-找不到

当我将“ sitemap.xml”更改为sitemapxml(除去扩展名)时,将调用我的控制器方法。已经进行了一些研究并使用了我的web.config,但似乎没有任何效果。

我尝试的第一件事是添加:

<modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)

第二件事:

 <add
name="AdfsMetadata"
path="sitemap.xml"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何做到这一点。我是否需要为此编写自己的处理程序?

干杯,斯特凡

iam*_*lin 6

该路由不起作用的原因是,默认情况下,.xml是由IIS中的“ StaticFileHandler”处理的,因此当请求来自ASP.net时不会被调用。

选项1:启用runAllManagedModulesForAllRequests-在您的Web .config中添加以下内容

<modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)

它位于system.webserver节点内部。

选项2:将.xml的映射添加到IIS,并将该文件扩展名强制进入ASP.net管道。看这里