首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sitemap.xml url返回404错误

sitemap.xml url返回404错误
EN

Stack Overflow用户
提问于 2013-12-11 22:04:37
回答 3查看 3.5K关注 0票数 3

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

代码语言:javascript
复制
  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");
    }

我在我的RouteConfig中添加了折叠路径:

代码语言:javascript
复制
   routes.MapRoute("Sitemap",
"sitemap.xml",
new { controller = "Home", action = "Sitemap" });

不幸的是,这是行不通的。我得到了-> HTTP错误404.0 -未找到

当我将"sitemap.xml“更改为sitemapxml (删除扩展)时,将调用我的控制器方法。已经做了一些研究,并与我的web.config玩,但似乎没有任何工作。

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

代码语言:javascript
复制
<modules runAllManagedModulesForAllRequests="true" />

第二件事

代码语言:javascript
复制
 <add
name="AdfsMetadata"
path="sitemap.xml"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />

谁能告诉我怎么处理这个。我必须为这个写我自己的Handler吗?

干杯,斯特凡

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-11 22:14:47

该路由不能工作的原因是,在默认情况下,.xml由IIS中的"StaticFileHandler“处理,因此当请求出现时,不会调用ASP.net。

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

代码语言:javascript
复制
<modules runAllManagedModulesForAllRequests="true" />

它位于system.webserver节点的内部。

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

票数 6
EN

Stack Overflow用户

发布于 2015-12-19 20:27:45

请遵循以下步骤:

1-删除网站目录根目录中的sitemap.xml (如果存在)

2-将MapRoute for sitemap.xml放在下面的其他MapRoutes之上:

代码语言:javascript
复制
 public static void RegisterRoutes(RouteCollection routes)
         {
             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

             routes.MapRoute(
             "Sitemap",
             "sitemap.xml",
              new { controller = "Home", action = "Sitemap" }
             );

             routes.MapRoute(
                 name: "Default",
                 url: "{controller}/{action}/{id}",
                 defaults: new { controller = "Home", action = "Index", id =      UrlParameter.Optional }
                 );

    }

产生错误的原因是当sitemap RouteMap在其他规则下时,MVC使用上面的RouteMap检查/sitemap.xml,然后抛出错误404以避免匹配控制器/操作。

票数 1
EN

Stack Overflow用户

发布于 2017-02-06 18:13:11

我知道这是一个老话题,但我有一个比"runAllManagedModulesForAllRequests“更好的解决方案。

模块先决条件:

IIS核心引擎使用先决条件来确定何时启用特定模块。例如,性能原因可能会确定您只想对也到托管处理程序的请求执行托管模块。以下示例(precondition="managedHandler")中的前提条件仅允许对也由托管处理程序处理的请求(如对.aspx或.asmx文件的请求)启用表单身份验证模块: 如果删除属性precondition="managedHandler",窗体身份验证也适用于托管处理程序(如.html、.jpg、.doc )所不提供的内容,但也适用于传统的ASP (.asp)或PHP (.php)扩展。有关为所有内容启用ASP.NET模块的示例,请参见“ASP.NET”。 您还可以使用快捷方式使所有托管(ASP.NET)模块能够为应用程序中的所有请求运行,而不考虑"managedHandler“前提条件。 要使所有托管模块能够运行所有请求,而无需配置每个模块条目以删除"**managedHandler**“先决条件,请使用 <modules> 部分中的 runAllManagedModulesForAllRequests 属性: 当您使用此属性时,"managedHandler“前提条件没有任何效果,所有托管模块都为所有请求运行。

您可以从它的原始主题中学到更多:RunAllManagedModulesForAllRequests=“真”意

因此,在MVC上为.XML url设置HTTP处理程序的更好方法是:

代码语言:javascript
复制
    <system.webServer>
        <handlers>
            <add name="Sitemap" path="sitemap.xml" type="System.Web.UI.PageHandlerFactory" verb="*" />
        </handlers>
    </system.webServer>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20530889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档