加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – 如何防止IIS7处理HTTP状态码401?

发布时间:2020-12-15 22:55:08 所属栏目:asp.Net 来源:网络整理
导读:我正在使用我的ASP.NET MVC 2项目.我创建异常过滤器来捕获用户没有权限查看某些操作时发生的未经授权的访问异常. [CustomError(typeof(UnauthorizedAccessException),"Error","UnauthorizedAccess")]public class MyController : BaseController{} 抛出异常
我正在使用我的ASP.NET MVC 2项目.我创建异常过滤器来捕获用户没有权限查看某些操作时发生的未经授权的访问异常.
[CustomError(typeof(UnauthorizedAccessException),"Error","UnauthorizedAccess")]
public class MyController : BaseController
{
}

抛出异常之后,我的过滤器将转移到以下方法的配置控制器/操作.

public ActionResult UnauthorizedAccess(ExceptionContext context)
{
    Response.StatusCode = CustomHttpStatusCode.UnauthorizedUser;

    return View(model);
}

最后,在ASP.NET应用程序结束此请求之前,将调用位于Global.ascx中的以下方法将自定义HTTP状态代码更改为HTTP状态401(未经授权的访问).

public void Application_EndRequest(object sender,EventArgs e)
{
    if (Response.StatusCode == CustomHttpStatusCode.UnauthorizedUser)
    {
        Response.StatusCode = 401;
    }
}

一切都在我的机器上工作正常(IIS 7.5).但它在我的部署网站上不起作用.它仍然返回纯文本“您没有权限查看此目录或页面”.而不是我的自定义错误页面.

PS.以下配置是我当前这个case的web.config.

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <system.web>
      <customErrors mode="On"></customErrors>
    </system.web>
    <system.webServer>
      <httpErrors errorMode="Custom">
         <remove statusCode="502" subStatusCode="-1" />
         <remove statusCode="501" subStatusCode="-1" />
         <remove statusCode="500" subStatusCode="-1" />
         <remove statusCode="412" subStatusCode="-1" />
         <remove statusCode="406" subStatusCode="-1" />
         <remove statusCode="405" subStatusCode="-1" />
         <remove statusCode="404" subStatusCode="-1" />
         <remove statusCode="403" subStatusCode="-1" />
         <remove statusCode="401" subStatusCode="-1" />
      </httpErrors>
    </system.webServer>
  </configuration>

解决方法

我刚刚找到了解决这个问题的方便.我只是添加新的设置到web.config文件,如下面的代码.一切都在我的部署网站上运行正常.
<?xml version="1.0" encoding="utf-8"?>
  <configuration> 
    <system.webServer>
      <httpErrors errorMode="Custom" existingResponse="PassThrough">
          <remove statusCode="502" subStatusCode="-1" />
          <remove statusCode="501" subStatusCode="-1" />
          <remove statusCode="500" subStatusCode="-1" />
          <remove statusCode="412" subStatusCode="-1" />
          <remove statusCode="406" subStatusCode="-1" />
          <remove statusCode="405" subStatusCode="-1" />
          <remove statusCode="404" subStatusCode="-1" />
          <remove statusCode="403" subStatusCode="-1" />
          <remove statusCode="401" subStatusCode="-1" />
      </httpErrors>
    </system.webServer>
  </configuration>

所以我可以在纯文本和JSON响应中创建自定义错误页面.

欲了解更多信息:HttpErrorsSection Class

PS.但是我在IIS管理器的“错误页面”功能中找不到existingResponse属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读