【问题标题】:Serving static files in ASP.NET to authorized users only仅向授权用户提供 ASP.NET 中的静态文件
【发布时间】:2017-10-17 05:49:50
【问题描述】:

我正在尝试保护我的项目下的一个文件夹,该文件夹只有一些静态文件,.htm.js 文件的组合。我试过创建一个自定义的HttpHandler,比如:

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下的system.webServer

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

文件夹中的文件由第 3 方提供。我将在文件夹中的 js 文件中调用一个函数,然后将用户重定向到其子结构内的正确 .htm 文件。我不希望用户能够键入 url 并访问任何文件。我做错了什么?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-5 iis-7


【解决方案1】:

你能不能把类型改成 TransferRequestHandler 并确保你的路径是正确的。

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

在您的 global.asax 文件中,您可以访问 Application_BeginRequest 中的请求以验证请求是否经过身份验证。

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多