ASP.NET MVC에서 동일한 이름을 가진 폴더와 컨트롤러를 갖는 방법은 무엇입니까?
-
08-07-2019 - |
문제
다운로드라는 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
, 정상적인 라우팅이 적용됩니다.