2017-10-17 267 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核实,如果该请求已经验证过了。