2012-02-17 2 views
15

저는 MVC 및 라우팅에 매우 익숙하며 다른 URL을 사용하도록 응용 프로그램을 수정하라는 요청을 받았습니다. 나는 경험이 없기 때문에 나에게 조금은 과업이다.ASP.NET MVC 라우팅 - 경로에 .html 확장명을 추가하십시오.

확인, 코드의 비트를 이야기 할 수 있습니다 :

routes.MapRoute(
"CategoryBySeName", // Route name 
"products/{SeName}", // URL with parameters 
new { controller = "Catalog", action = "CategoryBySeName" } 
); 

이 예상하지만 클라이언트가 경로의 끝에 ".html 중에서"을 원했다, 그래서 나는 변경으로 작동합니다

"products/{SeName}", // URL with parameters 

에 :

실패
"products/{SeName}.html", // URL with parameters 

가 (404 페이지 IIS - MapRequestHandler를) IIS가 노력처럼 보인다 g를 사용하여 응용 프로그램에 전달하지 않고 해당 이름의 실제 파일을로드하십시오. 유사

: ASP.NET MVC Routing to start at html page (응답하지, 중복되지 않음)

+1

경로 디버거를 연결하고 실제로 어떤 현상이 발생하는지 확인하십시오. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

답변

3

응용 프로그램 풀을 클래식에서 통합으로 변경하면 문제가 해결되었습니다. 도움을 주신 guyz에게 감사드립니다.

10

당신은 IIS 핸들러는 아마 이전에 MVC에 요청을 잡을 가능성이 올바른 것을 생각입니다.

IIS 7 가정 : 당신은 ASP.NET을 사용하는 IIS에서 .html 중에서 처리기를 편집해야 http://technet.microsoft.com/en-us/library/cc770990(v=ws.10).aspx

.

II6의 매핑 섹션에있는 앱 구성의 홈 디렉터리 탭 아래에있는 웹 사이트 속성에서 찾을 수 있습니다.

(버전은 다를 수 있음) C : \ windows \ microsoft.net \ framework \ v4.0.30319 \ aspnet_isapi.dll은 .html 파일을 처리하는 데 필요한 것입니다.

+2

''이 web.config에 이것을 추가했습니다. 문제가 여전히 존재합니다. – Dementic

+0

IIS 액세스없이이 작업을 수행 할 수 있는지 잘 모르겠습니다. 내 이해 (잘못된 것일 수 있습니다) IIS 매핑을 기반으로 요청을 보낼 수있는 위치를 결정하고 핸들러 정상적인 상황에서 다른 처리기를 재정의 할 수 없습니다. –

+5

디버깅 할 때 IIS Express에서이 문제를 해결해야하는 사람은 "모든 응용 프로그램 표시"에서 응용 프로그램을 선택하고 구성 소스에 대한 링크를 클릭 한 다음 "\ * .html "아래의 location/system.webServer/handlers 노드에있는 모든"\ *. cshtml "행을 미러링합니다. –

3

이 섹션을 Web.config에 추가하기 만하면/{* pathInfo} 경로에 대한 모든 요청은 pathInfo에 점이 있어도 지정된 핸들러에서 처리됩니다. (ServiceStack MVC 호스트의 Web.config의 예에서 가져온이 대답 https://stackoverflow.com/a/12151501/801189)

<location path="route"> 
    <system.web> 
     <httpHandlers> 
     <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" /> 
     </httpHandlers> 
    </system.web> 
    <!-- Required for IIS 7.0 --> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
     <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
    </system.webServer> 
    </location> 
7

당신은 ASP.NET 파이프 라인을 통해 모든 요청을 강제로, 당신은 웹에만이 한 줄을 추가하여 해당 작업을 수행 할 수 있습니다. config :

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

이것은 IIS Express에서 실행되는 ASP.Net MVC 4 응용 프로그램에서 작동했습니다. – Jimbo