2013-01-11 2 views
7

MVC 3에서는 문제가 없었지만 지금은 MVC 4로갔습니다.id에 파일 확장자가있는 경우 ASP.NET MVC 4 라우팅이 작동하지 않습니다.

URL은 다음처럼 보였다 :

팟 캐스트 - 01.MP4는 ID입니다
{controller}/{action}/{id} 

/podcast/file/PODCAST-01.MP4 

; 컨트롤러에 도달하면 컨트롤러가 파일을 클라이언트에 보내고 이렇게하면 파일을 얼마나 많은 사람들이 다운로드했는지 쉽게 알 수 있습니다.

그러나 이제 웹 서버는 파일이 있어야한다고 생각하고 404 오류를 표시합니다. 내 자신의 404 오류 페이지를 만든 다음 /podcast/file?id=PODCAST-01.MP4로 다시 리디렉션하여이 문제를 해결하려고 시도했지만 iTunes가 마음에 들지 않아 작동하지 않습니다. "?".

은 내가에게 새로운 경로를 만드는 시도 :

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}.{format}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, format = UrlParameter.Optional }); 

을하지만 그건 그냥 경로를 깨진 것 같습니다. 어떤 도움이라도 좋을 것입니다.

+2

에 대한 그 전에 새 처리기를 추가 할 필요가 어떻게됩니까? 그것은 한 눈에 똑바로 보인다. – Billdr

+0

"HTTP Error 403.14 - Forbidden 웹 서버가이 디렉토리의 내용을 나열하지 않도록 구성되었습니다."페이지로 이동하면이 오류가 발생합니다. RouteConfig.cs를 변경할 때 –

+0

파일 이름에 무엇이 있어야하는지 (가지고 있지 않은지)를 명시 적으로 정의하는'constraints' 섹션을 추가하는 것은 어떻습니까? (또한 역사적으로 [연속적인 선택적 매개 변수]에 문제가있었습니다 (http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx)) –

답변

5

그렇게 할 수 있습니다. MVC에서 4 솔루션 웹 설정이 포함되어 있습니다 : 당신이 경로를 나누기 말할 때

<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 

당신은 단순히 경로

<add name="ManagedFileWithExtension" path="podcast/file*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
1

당신은 그것을 할 수 없습니다 (나는 생각합니다) 요청을 분석하는 코드에서 접미사를 쉬어야합니다.

관련 문제