0

나는 다음과 같은 배포 요구 사항과 ASP.NET MVC 응용 프로그램이 있습니다고급 ASP.NET MVC 라우팅 시나리오

의 URL 구조는 같은 수 있어야합니다

http://server/app/[enterprise]/[communinty]/ {컨트롤러}/{동작} /. ..

MVC 라우트 핸들러가 손을 잡기 전에 URL을 가로 채고 [enterprise]/[community] 파트를 제거한 다음 MVC가 다음과 같이 처리를 계속할 수있게하려고한다고 생각합니다. 원래 URL에이 두 세그먼트가 포함되어 있지 않은 경우

응용 프로그램이 여러 고객 (기업) 여러 포털을 노출하고, 기업 내 각 지역 사회가 자신의 사용자 인구가 왜

는 여기에 있습니다. 이러한 종류의 구성표는 각 응용 프로그램 인스턴스 (바이너리, 콘텐츠, web.config)를 각 [community] 디렉토리에 물리적으로 배포하여 제공 할 수도 있지만 병참 및 성능상의 이유로이 경로를 사용하지 않을 것이라고 생각하지 않습니다. 그래서 라우팅 트릭을 통해 가상화하려고합니다.

이 계획이나 다른 해결책에 대한 제안 사항에 대한 제안은 만족 스러울 것입니다.

IIS 7에서 어떤 차이가 있는지 확인합니다.

+0

사람들은'http : // server/app/MyCompany/FightingDogs/Home/Index'를 방문한 다음 MyCompany/FightingDogs를 추출하여 URL에 http : // server/app/Home/Index '? (세션이나 쿠키에서 MyCompany/Fightingdocs에 대한 참조를 저장한다고 가정합니다.) – jao

+0

정확하게는 아닙니다.브라우저에서 볼 수있는 URL을 http : // server/app/MyCompany/FightingDogs/Home/Index로 유지하고 싶지만 MVC 컨트롤러/모델/etc가 "MyCompany/FightingDogs"부분에 대해 알아야하는 것은 원하지 않습니다. . – jlew

+0

라우팅을 사용하지 말고 로그인 할 때 현재 사용자의 엔터프라이즈 및 커뮤니티를 세션에 저장하는 것이 더 합리적입니까? 각 사용자 그룹마다 고유 한 URL을 문서에 포함시키는 것이 어려울 것이라고 생각합니다. – Ryan

답변

1

당신은 당신이 다음 액션 메소드에서 {기업}과 {커뮤니티} 매개 변수를 무시할 수 있습니다 기본 경로

routes.MapRoute(
    null, 
    "{enterprise}/{community}/{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

하기 전에 다음과 같은 경로를 사용할 수 있습니다.

+0

알다시피, 나는이 요소들을 "무시"하는 것이 불가능할 것이라고 생각 했었습니다. (보기 모델은 그것들을 포함해야 할 것입니다.) 그러나 그것은 당신이 옳았다 고 생각합니다. 감사! – jlew

0

다음은 IIS 재 작성 모듈에서 사용할 수있는 솔루션입니다. 최선의 방법은 아니지만 효과가있을 수 있습니다. MVC 라우팅 내에서 더 쉽고/더 나은 옵션이 있습니까? 확실하지 않다. 단지 저 자신을하기 시작했습니다.

예제로 "http://server.com/app/enterprise/community/controller/action/"을 사용합니다.

은 어떻게됩니까 :

  1. 이 URL에서 문자열을 제거합니다. 신규 URL : http://server.com/controller/action/
  2. 사용자를 새 URL로 리디렉션합니다. 사용자 브라우저는 지금 보여줍니다 http://server.com/controller/action/
  3. 새로운 URL을 취하고 올바른 내용을 잡아 그것을 다시 시도합니다. 사용자의 브라우저에 표시되는 내용 : http://server.com/controller/action/; IIS 반환 : http://server.com/app/enterprise/community/controller/action/

는 IIS 재 작성 모듈이 설치되면이 모든이의 Web.config에있을 것입니다 :

<rewrite> 
    <rules> 
     <clear /> 

     <rule name="Redirect to remove Offending String" enabled="true" patternSyntax="Wildcard" stopProcessing="true"> 
      <match url="server.com/app/enterprise/community*" /> 
      <action type="Redirect" url="/{R:1}" /> 
      <conditions logicalGrouping="MatchAll"> 
       <add input="{SERVER_NAME}" pattern="*server.com*" /> 
      </conditions> 
     </rule> 

     <rule name="Rewrite to get Original Content" enabled="true" patternSyntax="Wildcard" stopProcessing="false"> 
      <match url="*" /> 
      <conditions logicalGrouping="MatchAll"> 
       <add input="{SERVER_NAME}" pattern="*server.com*" /> 
      </conditions> 
      <action type="Rewrite" url="app/enterprise/community{R:1}" /> 
     </rule> 

    </rules> 
</rewrite> 

참고 : 그냥이 빠른 테스트하지 않았다.

+0

그는 라우팅이 내장 된 mvc를 사용하고 있습니다. (모를 경우) – jao

+0

MVC에 라우팅 기능이 내장되어 있다는 것을 알았지 만 jlew가 읽고 싶었던 것으로부터 MVC 라우팅이 가능하지 않을 수도 있다고 생각했습니다. 해. 그러나 jlew의 새로운 주석을 읽은 후 MVC 라우팅을 직접 처리하는 내 접근 방식이 원하는대로 작동하지 않습니다. – mcnarya