ASP.NET MVC에서 동일한 이름을 가진 폴더와 컨트롤러를 갖는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1437386

문제

다운로드라는 MVC 컨트롤러가 있습니다. http : // mysite/downloads

또한 물리적 파일을 물리적 폴더에 넣고 싶습니다. http : //mysite/downloads/myfile.zip.

단순히 폴더를 만들면 탐색 할 때 403을 얻습니다. http : // mysite/downloads. (디렉토리 브라우징으로 인해 대부분 비활성화되었을 가능성이 높습니다) 그러나 MVC 컨트롤러가 대신 시작되기를 원합니다.

어떻게해야하나요?

도움이 되었습니까?

해결책

당신이 찾아 보면 http://mysite/Downloads/{ACTION} 컨트롤러 동작을 발사합니다.

당신의 예에서 작동하지 않는 유일한 것은 /Downloads 조치없이. 이 URL을 다시 작성하여 기본 조치로 리디렉션 할 수 있습니다.

또한 RouteHandler에 다운로드 파일을 무시해야합니다. Global.asax 파일에 라인을 추가하여 모든 zip 파일을 무시하거나 적합한 다른 무시 패턴을 무시할 수 있습니다.

routes.Ignore("{resource}.zip");

다른 팁

.NET 3.5 이후 기존 파일을 라우팅 할 수 있습니다.

public static void RegisterRoutes(RouteCollection routes) {
    routes.RouteExistingFiles = true;
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       defaults: new { controller = "Home", 
                          action = "Index", 
                          id = UrlParameter.Optional }
    );
}

그래서 우리가 사이트 루트에 폴더가 있다고 가정 해 Markets 포함 audio.mp3 파일:

\Markets
\Markets\audio.mp3

a의 존재를 가정합니다 MarketsController, 우리가 요청을했다면 Markets, 그것은 라우팅 될 것입니다 Markets/Index.

우리가 요청했다면 /Markets/audio.mp3 우리는 MP3 파일을 받고 요청하면 Markets/AnythingElse, 정상적인 라우팅이 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top