【问题标题】:Asp.Net MVC HTTP Error 401.0 – UnauthorizedAsp.Net MVC HTTP 错误 401.0 – 未经授权
【发布时间】:2014-04-15 15:33:44
【问题描述】:

我有一个 MVC 应用程序,它使用声明授权,基于可用的优秀教程 here。在代码中,我覆盖了 ClaimsAuthorizationManager 的 CheckAccess 方法,以针对每个资源和操作实现我自己的逻辑

public class CustomAuthorisationManager : ClaimsAuthorizationManager
{
    public override bool CheckAccess(AuthorizationContext context)
    {
        string resource = context.Resource.First().Value;
        string action = context.Action.First().Value;

        if (action == "Show" && resource == "Code")
        {
            bool livesInScotland = context.Principal.HasClaim(ClaimTypes.Country, "Scotland");
            return livesInScotland;
        }

        return false;
    }
}

除了 CheckAccess 方法返回 false 时,我得到 HTTP 错误 401.0 – Unauthorized 之外,一切正常,正如我所读到的,它只能由 IIS 处理。我的问题是,如何在代码中处理此错误以向用户显示自定义错误页面。我见过许多不同的解决方案,例如 herehere,但从未设法使其适合我。

【问题讨论】:

    标签: asp.net-mvc error-handling authorization claims-based-identity claims


    【解决方案1】:

    你可以实现IHttpModule。可以在here 找到实施指南。 httpmodule 的好处是您几乎可以捕获任何 HTTP 响应并用它做您想做的事情。

    或者你可以看看this SO question。也许你会更喜欢它。

    【讨论】:

    • 我尝试了 IHttpModule 解决方案,但我的应用程序没有看到该模块。你确定它可以在 MVC 中使用吗?关于第二个解决方案,它仅指由 ASP 处理的 404 和 500 错误,而据我所知,401 由 IIS 解决(参见此处:patrickdesjardins.com/blog/…
    • HttpModule 在 IIS 级别介入,而不是 MVC。但是当你调试你的应用程序时,如果你有一个断点,你的应用程序调试器将进入模块。你有问题吗?我们已经在<system.webServer><modules>注册了模块并设置了<httpErrors existingResponse="PassThrough" errorMode="Detailed"> <clear /> </httpErrors>。我们对此没有任何问题。
    猜你喜欢
    • 2012-02-05
    • 2013-02-07
    • 2016-10-10
    • 2015-09-11
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2014-06-24
    相关资源
    最近更新 更多