3

我们正在与 SPA (MVC 4 + angularjs) 网站合作,我们希望拒绝未经授权的访问者访问静态文件。目前,对这个静态文件的所有请求都以重定向到登录页面结束。我们希望收到 401 或 403 错误代码。也可以使用 ajax 请求此文件。

web.config

    <authentication mode="None">
    </authentication>

静态文件夹中的Web.config :

<configuration>
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <clear/>
      <add type="System.Web.StaticFileHandler" path="*" verb="*"  name="StaticFileHandler"/>
    </handlers>
  </system.webServer>
</configuration>

我想知道我们如何拒绝未经授权的访问者访问静态文件(不重定向到登录页面)?

4

1 回答 1

2

我最终得到了这个解决方案:

  1. web.config添加到静态文件夹。

    <configuration>
      <system.web>
        <authorization>
          <deny users="?"/>
        </authorization>
      </system.web>
      <system.webServer>
        <handlers>
          <clear/>
          <add type="System.Web.StaticFileHandler" path="*" verb="*"  name="StaticFileHandler"/>
        </handlers>
      </system.webServer>
    </configuration>
    
  2. 添加抑制重定向到登录页面的特殊模块(在站点根web.config中)。

<modules runAllManagedModulesForAllRequests="false">   
  <add 
    name="SuppressRedirect" 
    type="Web.Common.Modules.SuppressRedirectModule, Web.Common"/>
</modules>

以及下面的模块代码

using System;
using System.Web;

namespace Web.Common.Modules
{
    public class SuppressRedirectModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.AuthenticateRequest += this.OnEndRequest;
        }

        private void OnEndRequest(object sender, EventArgs eventArgs)
        {
            HttpContext context = ((HttpApplication)sender).Context;
            context.Response.SuppressFormsAuthenticationRedirect = true;
        }

        public void Dispose()
        {
        }
    }
}
于 2013-05-30T17:20:12.050 回答