小编Lao*_*obu的帖子

在ASP.Net Core中使用HTTPClient作为DI Singleton的最佳方法

我试图弄清楚如何最好地使用ASP.Net Core中的HttpClient类.

根据文档和几篇文章,该类最好在应用程序的生命周期中实例化一次,并为多个请求共享.不幸的是,我找不到如何在Core中正确执行此操作的示例,因此我提出了以下解决方案.

我的特殊需求需要使用2个不同的端点(我有一个用于业务逻辑的APIServer和一个API驱动的ImageServer),所以我的想法是拥有2个可以在应用程序中使用的HttpClient单例.

我在appsettings.json中配置了我的服务点,如下所示:

"ServicePoints": {
"APIServer": "http://localhost:5001",
"ImageServer": "http://localhost:5002",
}
Run Code Online (Sandbox Code Playgroud)

接下来,我创建了一个HttpClientsFactory,它将实例化我的2个httpclients并将它们保存在静态Dictionary中.

public class HttpClientsFactory : IHttpClientsFactory
{
    public static Dictionary<string, HttpClient> HttpClients { get; set; }
    private readonly ILogger _logger;
    private readonly IOptions<ServerOptions> _serverOptionsAccessor;

    public HttpClientsFactory(ILoggerFactory loggerFactory, IOptions<ServerOptions> serverOptionsAccessor) {
        _logger = loggerFactory.CreateLogger<HttpClientsFactory>();
        _serverOptionsAccessor = serverOptionsAccessor;
        HttpClients = new Dictionary<string, HttpClient>();
        Initialize();
    }

    private void Initialize()
    {
        HttpClient client = new HttpClient();
        // ADD imageServer
        var imageServer = _serverOptionsAccessor.Value.ImageServer;
        client.BaseAddress = new Uri(imageServer);
        HttpClients.Add("imageServer", client);

        // ADD apiServer …
Run Code Online (Sandbox Code Playgroud)

c# dotnet-httpclient asp.net-core

10
推荐指数
2
解决办法
7254
查看次数

如何将ASP.net身份角色放入Identityserver4身份令牌

虽然我很高兴IdentityServer4存在并且在许多方面使我在身份验证方面的生活变得更加容易,但我偶然发现了问题以及在社区中为声明添加角色的许多讨论.

我的要求很简单:

  1. 我开发了需要身份验证和授权的应用程序(xamarin表单)
  2. 我需要一个系统来存储我的用户的身份(名称,密码,角色,电话...) - > ASP.net身份
  3. 我需要一个系统来验证我的用户 - > IdentityServer 4
  4. 每个用户的角色非常有限(用户/管理员),不会更改
  5. 我需要一个API后端和一个MVC管理站点(asp.net核心)
  6. 我想使用[Authorize(Roles ="Admin")]限制对某些API/MVC控制器的访问

我花了无数个小时尝试不同的配置,以便在认证后将asp.net Identity角色传递给我的MVC应用程序,但没有运气.目的如第6点所述.

我也花了无数个小时阅读,但我感觉自版本v1.0.0以来,关于角色的实现IdentityServer4.AspIdentity已经发生了很大的变化.

在阅读了很多关于这一点后,仍然不清楚如何实际实现这一点,因为似乎仅在2个月前描述的一些解决方案不再有效.

所以,现在我相信有两条路:

  1. 仅通过请求身份令牌并使用AlwaysIncludeInIdToken将角色置于身份令牌中?
  2. 让客户端使用userinfo端点检索角色,并以某种方式将它们注入到httpcontext(?)中,使用[Authorize(Roles ="Admin")]来检查mvc?

无论如何,这是我的假设.

那么,请详细帮助解释/记录,以便我们能够以持久的方式开始实施吗?一些可行的例子也很棒.

asp.net-mvc asp.net-core identityserver4

8
推荐指数
1
解决办法
3955
查看次数