2013-04-09 5 views
2

"ASP Protected"라는 ASP MVC 4 응용 프로그램에 서브 디렉토리를 넣었습니다. 그 디렉토리에 간단한 test.html 파일을 떨어 뜨 렸습니다. 브라우저에서 test.html 파일을 볼 때 내 사용자 정의 전역 AuthorizeAttribute 클래스를 트리거하십시오.ASP MVC 4 정적 파일을 처리하지 않음

IIS 모드를 통합 모드로 사용하고 있으므로이 방법이 효과적 일 것으로 생각됩니다. IIS 7을 통합 모드로 사용해 보았지만 여전히 작동하지 않습니다.

하지만 어쩌면 모든 일이 잘못 될 수 있습니다. 어쩌면 내가 가진 오해 일 수도 있습니다.

기본적으로 해당 폴더 내의 정적 파일에 대한 요청을 프로그래밍 방식으로 인증해야합니다. 거기에 또 다른 방법이 있을까요?

업데이트 : 4/9/2013 10:07:25 AM 광고 : 아래의 Zidad의 답변은 올바른 방향으로 진행되고 있지만 지금 경로를 구성하는 데 문제가 있습니다. 여기에 내가 가지고있는 것이 있지만, 파일은 Home/File 액션을 누르는 대신에 직접적으로 제공되고있다.

AD에 의해 2013년 4월 9일 오전 10시 20분 54초의 같은
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute("NotFound", "protected/test.html", new { controller = "Home", action = "File" }); 

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

업데이트 : Ohhhhhhhhhhhhhhhhhhh, 지금은 그것을 얻을! 확실히 내 부분에 대한 오해. 내가 배울 점이 몇 가지있다. 다음은 web.config 파일을 추가 할 수 있어야

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

: :)

답변

3

먼저 정적 파일을 제공 할 때 IIS가 바이 패스 .NET을하지 않도록하기 위해의 Web.config에 추가해야합니다 포함 된 보호 된 폴더 :

<authorization> 
    <deny users="?" /> 
</authorization> 

당신이 'AuthorizeAttribute'를 사용하려는 경우, 당신이 보호 된 폴더에있는 파일을 반환하는 컨트롤러 액션에 대한 경로를 매핑 할 수 있고, 같은, 그 방법에 특성을 적용 이 :

Can an ASP.NET MVC controller return an Image?

UPDATE :

routes.MapRoute(
       name: "ProtectedFile", 
       url: "protected/{name}", 
       defaults: new { controller = "Home", action = "File", name = "index.html" }); 

는 다음과 같은 액션을 쓰기 : 당신의 보호에 URL의를 유지하기는이 같은 경로를 구성 할 수 있습니다 동일한 파일

public ActionResult File(string name){ 
// return file 
} 

보라 : .NET을 통해 모든 정적 파일을 제공하는 경우 성능이 저하되며이 작업은 IIS가 자동으로 수행하는 모든 HTTP 모범 사례를 고려하지 않습니다 정적 컨텐트 압축, "수정되지 않음 (304)"HTTP 상태, ETAG 추가 등의 정적 파일을 제공 할 때 캐리가 필요합니다.

+0

이제 상황을 반영하도록 질문을 업데이트했습니다. –