2017-10-17 251 views
0

我試圖確保我的項目下只有一些靜態文件的文件夾,組合爲.htm.js文件。我曾嘗試創建一個自定義HttpHandler,如:僅向授權用戶提供ASP.NET中的靜態文件

public class StaticFilesHttpHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     if (context.Request.IsAuthenticated) 
     { 
      // continue with the request 
     } 
     else 
     { 
      throw new HttpResponseException(HttpStatusCode.Unauthorized); 
     } 
    } 

    public bool IsReusable => false; 
} 

然後註冊它可以通過Route.Config

routes.RouteExistingFiles = true; 
routes.Add("helpRoute", new Route("folder/*.htm", new StaticFilesRouteHandler())); 

和路由處理程序與路徑用於提供

public class StaticFilesRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext context) 
    { 
     return new StaticFilesHttpHandler(); 
    } 
} 

,也通過web.configsystem.webServer

<handlers> 
    <add name="StaticFileHandler" verb="GET" path="~/help/default.htm" type="StaticFilesHttpHandler "/> 
</handlers> 

文件夾中的文件由第三方提供。我將在文件夾中的一個js文件中調用一個函數,然後將該用戶重定向到其子結構中適當的.htm文件。我不希望用戶能夠輸入網址並訪問任何文件。我究竟做錯了什麼?

+0

請參閱[MVC網站 - 如何防止訪問靜態文件](https://stackoverflow.com/q/36425635/) – NightOwl888

+0

@ NightOwl888可以消除對這些文件的所有訪問。我仍然希望用戶能夠訪問這些文件,但只有在授權後才能訪問這些文件。 –

+0

你說得對。您應該看到[如何在IIS 7.5上使用ASP.NET窗體身份驗證保護靜態文件?](https://stackoverflow.com/questions/2903292/how-do-i-protect-static-files-with-asp- net-form-authentication-on-iis-7-5)。 – NightOwl888

回答

1

您可以將類型更改爲TransferRequestHandler並確保您的路徑正確。

<handlers> 
    <add name="StaticFileHandler" verb="GET" path="~/help/default.htm" type="TransferRequestHandler" /> 
</handlers> 

在Global.asax文件,你可以訪問請求的Application_BeginRequest覈實,如果該請求已經驗證過了。