MVCSitemap Issue



我在MVC站点地图上遇到了一个奇怪的问题。目前,我最多有3个级别的站点地图链接,将来可能会更改。问题是当我处于下一个级别但基本级别正常工作时,中级站点地图链接不起作用(单击链接抛出错误 - Http 403.1 禁止)。它发现URL不正确,例如区域和Contoller名称只是弹出错过的操作名称。

EG:首页>公司简介>添加

在添加屏幕(最终级别)上时, - 单击主页重定向到本地主机:xxxx/主页/索引并正常工作。

    单击"公司"重定向到本地主机:xxxx/公司/公司,预计重定向
  • 到本地主机:xxxx/公司/公司/索引

并导致以下错误,

本地主机: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 相同的位置有一个物理目录,该目录优先于它。换句话说,位置<website_root_directory>CompanyCompany中已经有一个文件夹,该文件夹优先于对具有相同 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" }
        );
    }
}

如果操作名称为"索引"且控制器名称为"公司",这将生成 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" }
        );
    }
}
由于操作名称

是必需的,因此如果操作名称为"索引"且控制器名称为"公司",则将/Company/Company/Index生成的 URL。

相关内容

  • 没有找到相关文章