0

У меня возникла странная проблема с MVC Sitemap. В настоящее время у меня было максимум 3 уровня ссылки sitemap, которые могут измениться в будущем. Проблема в том, что ссылка на карту сайта среднего уровня не работает (нажатие на ошибку металирования ссылок - Http 403.1 Forbidden), когда я нахожусь на следующем уровне, но базовый уровень работает. Он обнаружил, что URL-адрес не является правильным, например, имя Area и Contoller вызывает только пропущенное имя действия.MVCSitemap Issue

EG: Главная> О компании> Добавить

Когда на экране Add (окончательный уровень), - нажав на главном перенаправляешь на локальный хост: хххй/Главный/индекс и работает нормально.

  • щелкать на компании перенаправляет на локальный хост: ххая/Компания/Company, где предполагаются перенаправить на локальный хост: ххая/О компании/Компании/индекс

и результаты в следующей погрешности:

localhost: xxxx/Компания/

Ошибка HTTP 403.14 - Запрещено Веб-сервер настроен так, чтобы не отображать содержимое этого каталога. Наиболее вероятные причины: • Документ по умолчанию не настроен для запрошенного 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> 

ответ

0

Всякий раз, когда вы получите сообщение об ошибке, которое говорит «Веб-сервер настроен не перечислить содержимое этого каталога», это обычно означает, что есть физический каталог в том же месте, что и URL-адрес, который имеет приоритет над ним. Другими словами, в папке <website_root_directory>\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" } 
     ); 
    } 
} 

Это будет генерировать URL /Company/Company, если имя действия «Index» и имя контроллера «Компания».

Если вы сделаете действие не факультативным, оно будет работать так, как вы ожидаете.

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

Поскольку требуется имя действия, то URL генерируется будет /Company/Company/Index, если имя действия «Index» и имя контроллера «Компания».

+0

Thanks bro !!! Вы спасли мне миллион долларов, я выяснил, что это не проблема с MVCSitemap, все проблемы связаны с маршрутизацией, но это не сработало. Но нужно немного больше информации об этом, пожалуйста, следуйте приведенному ниже ответу и, пожалуйста, помогите в этом, почему это не сработало, что я ранее пробовал и добился успеха. – Jobins

0

Между мной я попытался добавить еще одну маршрутизацию, чтобы избавиться от того, что я сделал ранее, и это удалось, но здесь это не получилось. Почему это ниже ничего не получилось?

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
      "Company", 
      "Company", 
      defaults: new { controller = "Company", action = "Index" }); 

    context.MapRoute(
     "Company_default", 
     "Company/{controller}/{action}/{id}", 
     // Action was removed as an optional parameter 
     new { id = UrlParameter.Optional } 
    ); 
}