首页 新闻 会员 周边 捐助

WebApi 过滤器到控制器传值的问题

0
悬赏园豆:10 [已解决问题] 解决于 2017-11-22 17:00

在过滤器中获取当前请求header中传递的身份信息,解析后进行验证,到控制器中我想要使用这个解析后的身份信息时,如何传递过去?之前一直是在Controller中再解析一遍,后来将数据存储在HttpContext.Current.Items属性里面,有什么其他方法呢?

最美的不是下雨天的主页 最美的不是下雨天 | 初学一级 | 园豆:4
提问于:2017-11-14 18:31
< >
分享
最佳答案
0

ASP.NET Core 中的一种实现方法

1、实现一个 Action Filter

public class SampleActionFilter : IAsyncActionFilter
{
    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        var claimsIdentity = new ClaimsIdentity(new Claim[] {
            new Claim(ClaimTypes.Name, "test") }, "Basic");
        var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
        context.HttpContext.User = claimsPrincipal;
        await next();
    }
}

2、在 Startup.cs 中注册这个 Filter

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options =>
    {
        options.Filters.Add<SampleActionFilter>();
    });
}

3、在 Action 中读取 Action Fitler 中设置的用户信息

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return Content("Current User: " + User.Identity.Name );
    }
}

4、运行结果

Current User: test
收获园豆:10
dudu | 高人七级 |园豆:30734 | 2017-11-15 10:26

学习了,非常感谢您

最美的不是下雨天 | 园豆:4 (初学一级) | 2017-11-15 14:35
其他回答(1)
0

线程静态也是可以的.

最好还是放在请求上下文中

吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-14 21:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册