相关疑难解决方法(0)

授权和ASP.NET MVC缓存

我对ASP.NET MVC缓存和授权感到困惑,并且急需一些澄清.

我的自制授权属性继承自AuthorizeAttribute.它的重写AuthorizeCore方法每次都会运行,即使我[OutputCache]在控制器操作上设置了一个属性.我明白那一部分.

现在,对我来说这个问题:现在当我实际执行输出缓存并且从缓存中提供页面时,每次AuthorizeCore都会失败.原因是当缓存请求时,httpContext.Session提供的AuthorizeCorenull!?这是一些简化的代码:

protected override bool AuthorizeCore(HttpContextBase httpContext) {
    return (Session["userId"] != null)
}
Run Code Online (Sandbox Code Playgroud)

所以如果httpContext.Sessionnull,这显然每次都失败了.我需要访问会话,我还能如何检查请求是否被授权?这没有任何意义 - 如果这是它应该如何,那么我永远不能在ASP.NET MVC中使用缓存页面和身份验证.救命?

c# asp.net-mvc session authorize asp.net-caching

6
推荐指数
1
解决办法
6020
查看次数

阻止在ASP.NET MVC中缓存属性,每次执行一个Action时强制执行属性

根据各种文章(例如此处此处),ASP.NET MVC Actions上的属性结果可能会被缓存,并且在调用控制器操作时不会再次执行.

在我的情况下,这种行为是不可取的(例如,我有一个基于我自己的属性和IP的授权系统,每次都需要执行的角色检查,以及其他事情).

如何阻止ASP.NET MVC缓存我的属性/属性执行结果并保证每次执行它们?

asp.net-mvc attributes action-filter

5
推荐指数
1
解决办法
2851
查看次数

.NET Core Action Filter 不是属性类

我有这个想要调用的动作过滤器,我已经在 Startup.cs 中声明了它。但是,当我在班级上方调用它时,出现此错误:

LogUserNameFilter 不是属性类

我不确定我错过了什么。

public class LogUserNameFilter : IActionFilter
{
    private readonly RequestDelegate next;

    public LogUserNameFilter(RequestDelegate next)
    {
        this.next = next;
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        throw new NotImplementedException();
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        LogContext.PushProperty("UserName", context.HttpContext.User.Identity.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

启动文件

services.AddScoped<LogUserNameFilter>();
Run Code Online (Sandbox Code Playgroud)

类声明

[LogUserNameFilter]
public class HomeController : Controller{


}
Run Code Online (Sandbox Code Playgroud)

asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
999
查看次数