Asp.net mvc MVCSitemap问题

Asp.net mvc MVCSitemap问题,asp.net-mvc,mvcsitemapprovider,sitemapprovider,Asp.net Mvc,Mvcsitemapprovider,Sitemapprovider,我在MVC站点地图上遇到了一个奇怪的问题。目前,我有最多3级的网站地图链接,这可能会改变在未来。问题是中级站点地图链接不工作单击链接抛出错误-Http 403.1禁止当我在下一级但基本级工作时。它发现URL是不正确的,比如区域和控件名只是弹出了遗漏的操作名 例如:主页>公司>添加 在添加屏幕最终级别时, -单击Home会重定向到localhost:xxxx/Home/index,工作正常。 单击“公司”将重定向到localhost:xxxx/Company/Company,预期将重定向到loc

我在MVC站点地图上遇到了一个奇怪的问题。目前,我有最多3级的网站地图链接,这可能会改变在未来。问题是中级站点地图链接不工作单击链接抛出错误-Http 403.1禁止当我在下一级但基本级工作时。它发现URL是不正确的,比如区域和控件名只是弹出了遗漏的操作名

例如:主页>公司>添加

在添加屏幕最终级别时, -单击Home会重定向到localhost:xxxx/Home/index,工作正常。

单击“公司”将重定向到localhost:xxxx/Company/Company,预期将重定向到localhost:xxxx/Company/Company/index

并导致以下错误:

本地主机:xxxx/公司/公司/

HTTP错误403.14-禁止 Web服务器配置为不列出此目录的内容。 最可能的原因: •未为请求的URL配置默认文档,服务器上未启用目录浏览

MVC.Sitemap的详细信息如下:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
    xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

<mvcSiteMapNode key="Home" title="Home" controller="Home" action="Index">
<mvcSiteMapNode key="Company" title="Company" area="Company" controller="Company" action="Index">
  <mvcSiteMapNode key="CompanyAdd" title="Add Company" area="Company" controller="Company" action="Add" />
</mvcSiteMapNode>
</mvcSiteMapNode>

</mvcSiteMap>

每当您收到一个错误,表示Web服务器配置为不列出此目录的内容时,通常意味着与URL位于同一位置的物理目录优先于它。换句话说,在\Company\Company\位置已经有一个文件夹,它优先于使用相同URL调用控制器

您遇到的另一个问题是您为公司区域设置路由的方式。如果您有一个可选的操作名称,并且该操作名称的配置值与可选值相同,则在生成URL时将不使用该名称

public class CompanyAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Company";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Company_default",
            "Company/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
            new string[] { "MyRootNamespace.Areas.Company.Controllers" }
        );
    }
}
如果操作名称为Index,控制器名称为Company,则将生成URL/Company/Company

如果您使操作不是可选的,那么它将像您期望的那样工作

public class CompanyAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Company";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Company_default",
            "Company/{controller}/{action}/{id}",
            // Action was removed as an optional parameter
            new { id = UrlParameter.Optional },
            new string[] { "MyRootNamespace.Areas.Company.Controllers" }
        );
    }
}

由于操作名称是必需的,如果操作名称是Index,控制器名称是Company,则生成的URL将是/Company/Company/Index。

谢谢兄弟!!!你为我节省了一百万美元的时间,我发现这不是MVCSitemap的问题所有的问题都是路由问题,但没有解决。但是需要更多关于这方面的更新,请遵循下面的答案,并请帮助我解释为什么我以前尝试过并成功了它没有起作用。