ASP.NET MVC 4 SPA如何删除重定向到登录页面?

时间:2013-04-17 18:28:07

标签: asp.net-mvc asp.net-mvc-4 authorization single-page-application

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

Root 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>

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

1 个答案:

答案 0 :(得分: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 中),禁止重定向到登录页面。

  3. <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()
            {
            }
        }
    }