Asp.net core mvc AllowAnonymous属性在.net core api 2.2中不起作用。建议复制或回答之前请考虑(磊科)和版本(2.2)。

Asp.net core mvc AllowAnonymous属性在.net core api 2.2中不起作用。建议复制或回答之前请考虑(磊科)和版本(2.2)。,asp.net-core-mvc,asp.net-core-webapi,Asp.net Core Mvc,Asp.net Core Webapi,我在.net core api 2.2中工作,在那里我使用授权过滤器。我只是检查头中授权标记中的承载令牌,若承载令牌已经存在,那个么可以调用用户操作。但我想从授权部分排除一些行为。我在特定操作上使用AllAnonymous属性,但在同一匿名方法上调用授权筛选器。过滤器的代码如下所示: using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.Filters; public class ApiAutho

我在.net core api 2.2中工作,在那里我使用授权过滤器。我只是检查头中授权标记中的承载令牌,若承载令牌已经存在,那个么可以调用用户操作。但我想从授权部分排除一些行为。我在特定操作上使用AllAnonymous属性,但在同一匿名方法上调用授权筛选器。过滤器的代码如下所示:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Filters;
    public class ApiAuthorizeFilter : AuthorizeAttribute, IAuthorizationFilter
        {
            public void OnAuthorization(AuthorizationFilterContext context)
            {
                string token = context.HttpContext.GetToken();
                if (string.IsNullOrEmpty(token))
                {
                    context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                }
                else
                {
                    string realmId = context.HttpContext.GetRealm();
                    if (string.IsNullOrEmpty(realmId))
                    {
                        context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                    }
                }
            }
        }

根据我检查的一些解决方案,这是没有得到解决。请共享有关.net core API 2.2版的任何解决方案。

您可以检查
授权方法中的
AllowAnonymous
属性:

// Allow Anonymous skips all authorization
if (context.Filters.Any(item => item is IAllowAnonymousFilter))
{
    return;
}
根据您的代码:

public class ApiAuthorizeFilter : AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // Allow Anonymous skips all authorization
        if (context.Filters.Any(item => item is IAllowAnonymousFilter))
        {
            return;
        }
        string token = context.HttpContext.GetToken();
        if (string.IsNullOrEmpty(token))
        {
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
        else
        {
            string realmId = context.HttpContext.GetRealm();
            if (string.IsNullOrEmpty(realmId))
            {
                context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            }
        }
    }
}

这回答了你的问题吗@马图,我已经添加了这个问题的具体版本。在提交问题之前,我已经检查了您提供的url。它与框架和版本无关。感谢您的建议,但上述代码不适用于需要授权的操作。它正在从所有操作中删除授权功能。请根据.net核心API v2.2回复。关于v2.0或MVC找到了许多答案。但是它们在V2.2中不起作用。@Deepak“上面的代码不适用于那些需要授权的操作。”-->?那么为什么要添加[AllowAnonymous]?我正在通过授权筛选器授权操作,但某些操作需要匿名。但当我将[AllAnonymous]过滤器置于操作状态时,它不起作用,授权过滤器正在执行。请提供有关.net core api v2.2的任何答案
,但当我将[AllAnonymous]筛选器置于操作状态时,它不工作,正在执行授权筛选器
是的,已执行筛选器,这就是为什么您可以将上述代码放在授权中,使具有AllAnonymous属性的操作绕过过滤器。同样,这些代码在.net核心api v2.2中工作。你试过这些代码吗?在我的代码中,我的参数是“AuthorizationFilterContext”。请建议我可以从哪里获得上面url中提到的“HttpActionContext”。如果有,请共享代码。