【问题标题】:RouteTable Redirect for SiteMapSiteMap 的 RouteTable 重定向
【发布时间】:2013-12-04 15:13:31
【问题描述】:

我在这个网站上看到了很多这段代码,但我似乎无法让它工作。当我导航到 www.mysite.com/sitemap.xml 时,它给了我一个 404 错误。这是我的RouteTable 设置代码:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.Clear();
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.RouteExistingFiles = true;

        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 }
        );
    }
}

这里是 Global.asax:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

有人能指出我做错了什么吗?它看起来像C# mvc3 redirect sitemap.xml to controller action 等问题中给出的示例。

【问题讨论】:

  • 将其置于调试中并检查它实际尝试路由到的位置..
  • 我不知道你可以调试路由。我应该把断点放在哪里?
  • 我的意思是网站.. 是显示 404 错误还是 .NET 'Cannot find view/route' 错误页面?
  • 详细错误信息:模块 IIS Web 核心通知 MapRequestHandler 处理程序 StaticFile 错误代码 0x80070002 请求的 URL localhost:8295/sitemap.xml 物理路径 C:\Users\Dev\Documents\Dev\Site\sitemap.xml 登录方法匿名登录用户匿名请求跟踪目录 C:\Users\Dev\Documents\IISExpress\TraceLogFiles\SITE 这是您需要的信息吗?
  • 肯定是404错误。 “HTTP 错误 404.0 - 未找到您要查找的资源已被删除、名称已更改或暂时不可用。”

标签: c# asp.net-mvc asp.net-mvc-routing sitemap


【解决方案1】:

在使用处理程序进行更多尝试和错误之后,我能够让它工作。事实证明,StaticFile 处理程序确实是问题所在。我可以通过将以下内容添加到我的 web.config 文件来修复它:

<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit_XML" path="*.xml" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit_XML" path="*.xml" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0_XML" path="*.xml" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

【讨论】:

    【解决方案2】:

    您也可以使用this answer 中的这个较短版本

    <handlers>
    <add name="xml-file-handler" path="*.xml" type="System.Web.UI.PageHandlerFactory" verb="*" />
    </handlers>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2020-09-18
      相关资源
      最近更新 更多