将服务注入动作过滤器

海德

我试图将服务注入到动作过滤器中,但是没有在构造函数中注入所需的服务。这是我所拥有的:

public class EnsureUserLoggedIn : ActionFilterAttribute
{
    private readonly ISessionService _sessionService;

    public EnsureUserLoggedIn()
    {
        // I was unable able to remove the default ctor 
        // because of compilation error while using the 
        // attribute in my controller
    }

    public EnsureUserLoggedIn(ISessionService sessionService)
    {
        _sessionService = sessionService;
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Problem: _sessionService is null here
        if (_sessionService.LoggedInUser == null)
        {
            context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            context.Result = new JsonResult("Unauthorized");
        }
    }
}

我像这样装饰控制器:

[Route("api/issues"), EnsureUserLoggedIn]
public class IssueController : Controller
{
}

Startup.cs

services.AddScoped<ISessionService, SessionService>();
恩科西

使用这些文章作为参考:

ASP.NET核心操作筛选器

ASP.NET 5和MVC 6中的动作筛选器,服务筛选器和类型筛选器

将过滤器用作ServiceFilter

由于过滤器将用作ServiceType,因此需要向框架IoC注册。如果直接使用动作过滤器,则不需要这样做。

Startup.cs

public void ConfigureServices(IServiceCollection services) {
    services.AddMvc();

    services.AddScoped<ISessionService, SessionService>();
    services.AddScoped<EnsureUserLoggedIn>();

    ...
}

使用ServiceFilter属性将自定义过滤器添加到MVC控制器方法和控制器类中,如下所示:

[ServiceFilter(typeof(EnsureUserLoggedIn))]
[Route("api/issues")]
public class IssueController : Controller {
    // GET: api/issues
    [HttpGet]
    [ServiceFilter(typeof(EnsureUserLoggedIn))]
    public IEnumerable<string> Get(){...}
}

还有其他的例子

  • 使用过滤器作为全局过滤器

  • 将过滤器与基本控制器一起使用

  • 通过订单使用过滤器

看一看,尝试一下,看看是否可以解决您的问题。

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义动作过滤器统一依赖注入Web API 2

来自分类Dev

将TempData从动作过滤器传递到动作

来自分类Dev

将动作过滤器添加到局部视图

来自分类Dev

如何将JSon对象从动作过滤器类传递到Onsuccess脚本

来自分类Dev

通过构造函数将方法参数发送到动作过滤器

来自分类Dev

生成由动作过滤器控制的PDF?

来自分类Dev

阻止在动作过滤器中执行

来自分类Dev

如何使用动作过滤器更改输入参数

来自分类Dev

如何在ASP.NET CORE中将动作过滤器与依赖注入一起使用?

来自分类Dev

Web API 2-将数据从动作过滤器传递到动作作为参数

来自分类Dev

在运行时在动作过滤器/消息处理程序中设置已注册服务的类型

来自分类Dev

覆盖的动作是否从基本动作继承动作过滤器?

来自分类Dev

如何使动作过滤器使经过过滤的动作返回HttpNotFoundResult?

来自分类Dev

如何使动作过滤器使经过过滤的动作返回HttpNotFoundResult?

来自分类Dev

如何开发特定于动作过滤器的控制器或动作方法

来自分类Dev

使用动作过滤器修改动作内的值

来自分类Dev

控制器上的同类型动作过滤器及其动作方法

来自分类Dev

控制器上的同类型动作过滤器及其动作方法

来自分类Dev

在MVC动作过滤器中获取类似于webapi的动作参数

来自分类Dev

将$ scope注入过滤器(AngularJS)

来自分类Dev

如何为所有控制器编写动作过滤器

来自分类Dev

在MVC 5中的动作过滤器中调用异步方法

来自分类Dev

在MVC5中自动调用动作过滤器

来自分类Dev

如何在动作过滤器中获取当前模型

来自分类Dev

将会话变量存储在动作过滤器或静态方法中

来自分类Dev

什么时候需要包括/排除MVC动作过滤器的基本调用?

来自分类Dev

Web API动作过滤器可处理空集和404

来自分类Dev

动作过滤器中的ASP.NET Web API读取模型

来自分类Dev

动作过滤器属性无法与Hub类一起正常使用

Related 相关文章

  1. 1

    自定义动作过滤器统一依赖注入Web API 2

  2. 2

    将TempData从动作过滤器传递到动作

  3. 3

    将动作过滤器添加到局部视图

  4. 4

    如何将JSon对象从动作过滤器类传递到Onsuccess脚本

  5. 5

    通过构造函数将方法参数发送到动作过滤器

  6. 6

    生成由动作过滤器控制的PDF?

  7. 7

    阻止在动作过滤器中执行

  8. 8

    如何使用动作过滤器更改输入参数

  9. 9

    如何在ASP.NET CORE中将动作过滤器与依赖注入一起使用?

  10. 10

    Web API 2-将数据从动作过滤器传递到动作作为参数

  11. 11

    在运行时在动作过滤器/消息处理程序中设置已注册服务的类型

  12. 12

    覆盖的动作是否从基本动作继承动作过滤器?

  13. 13

    如何使动作过滤器使经过过滤的动作返回HttpNotFoundResult?

  14. 14

    如何使动作过滤器使经过过滤的动作返回HttpNotFoundResult?

  15. 15

    如何开发特定于动作过滤器的控制器或动作方法

  16. 16

    使用动作过滤器修改动作内的值

  17. 17

    控制器上的同类型动作过滤器及其动作方法

  18. 18

    控制器上的同类型动作过滤器及其动作方法

  19. 19

    在MVC动作过滤器中获取类似于webapi的动作参数

  20. 20

    将$ scope注入过滤器(AngularJS)

  21. 21

    如何为所有控制器编写动作过滤器

  22. 22

    在MVC 5中的动作过滤器中调用异步方法

  23. 23

    在MVC5中自动调用动作过滤器

  24. 24

    如何在动作过滤器中获取当前模型

  25. 25

    将会话变量存储在动作过滤器或静态方法中

  26. 26

    什么时候需要包括/排除MVC动作过滤器的基本调用?

  27. 27

    Web API动作过滤器可处理空集和404

  28. 28

    动作过滤器中的ASP.NET Web API读取模型

  29. 29

    动作过滤器属性无法与Hub类一起正常使用

热门标签

归档