0

MVC Sitemap에 이상한 문제가 있습니다. 현재 나는 미래에 변할지도 모르는 3 가지 레벨의 사이트 맵 링크를 가지고 있습니다. 문제는 중간 수준의 사이트 맵 링크가 작동하지 않습니다 (링크 던지기 오류 - Http 403.1 금지됨) 다음 레벨에 있지만 기본 레벨이 작동 할 때 발생합니다. Area 및 Contoller 이름이 놓친 작업 이름 만 표시하는 것처럼 URL이 적절하지 않음을 발견했습니다.MVCSitemap 문제

EG : 홈> 회사 소개> 추가

하면 추가 화면 (최종 단계)에, - 홈에 클릭하면 로컬 호스트로 리디렉션 : XXXX/홈/색인 및 작업 잘. 회사에

  • 클릭 로컬 호스트로 리디렉션 : XXXX/회사가 로컬 호스트로 리디렉션 할 것으로 예상된다/회사 명 : XXXX/회사 소개/회사 소개/인덱스

및 결과 다음 오류 있음,

로컬 호스트 : 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과 동일한 위치에있는 실제 디렉토리로, 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를 생성합니다.

작업을 선택 사항이 아닌 것으로 설정하면 예상대로 작동합니다. 액션 이름이 필요하기 때문에 액션 이름이 "인덱스"이고 컨트롤러 이름은 "회사"의 경우

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 될 것입니다.

+0

감사합니다. 당신은 백만 달러의 시간을 절약 해주었습니다. 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 } 
    ); 
}