Comment accéder à courant Uri absolu de toute ASP .Net classe de Base?

Je suis à essayer de comprendre comment accéder à la actuel Uri absolu -- c'est à dire l'url absolue de la vue qui est actuellement en cours de rendu -- d'une classe d'utilisateur .Net De Base 1.1

J'ai trouvé ce lien, mais il semble être obsolète et déclenche une erreur après erreur: Obtenir les Url absolues à l'aide de ASP.NET Core, MVC 6


Dans mon Démarrage.cs que j'ai ConfigureServices:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

Dans mon Démarrage.cs que j'ai Configurer:

IHttpContextAccessor httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
Extensions.Context.Configure(httpContextAccessor);

J'ai la classe suivante:

using Microsoft.AspNetCore.Http;
using System;

namespace Framework.Extensions
{
    public static class Context
    {
        private static IHttpContextAccessor HttpContextAccessor;
        public static void Configure(IHttpContextAccessor httpContextAccessor)
        {
            HttpContextAccessor = httpContextAccessor;
        }

        private static HttpContext GetCurrentContext()
        {
            return HttpContextAccessor.HttpContext;
        }
        public static HttpContext Current = GetCurrentContext();

        private static Uri GetAbsoluteUri()
        {
            UriBuilder uriBuilder = new UriBuilder();
            uriBuilder.Scheme = GetCurrentContext().Request.Scheme;
            uriBuilder.Host = GetCurrentContext().Request.Host.ToString();
            uriBuilder.Path = GetCurrentContext().Request.Path.ToString();
            uriBuilder.Query = GetCurrentContext().Request.QueryString.ToString();
            return uriBuilder.Uri;
        }
        public static Uri AbsoluteUri = GetAbsoluteUri();
        public static string Url = GetAbsoluteUri().ToString();
        public static string AbsolutePath = GetAbsoluteUri().AbsolutePath;
    }
}

- Je obtenir de l'exception suivante:

Système.TypeInitializationException a été gérée par le code de l'utilisateur
HResult=-2146233036 Message=L'initialiseur de type pour
"Cadre de référence.Extensions.Contexte " a déclenché une exception.
TypeName=Cadre.Extensions.Contexte InnerException:
HResult=-2147467261
Message=la référence d'Objet n'est pas définie à une instance d'un objet.
Source=www
StackTrace:
au Cadre.Extensions.Contexte.GetCurrentContext() dans E:\Websites\Stage\www\Extensions\Context.cs:line 16
au Cadre.Extensions.Contexte..cctor() dans E:\Websites\Stage\www\Extensions\Context.cs:line 18
InnerException:

travaux. Quelle erreur avez-vous?
J'ai ajouté mon code actuel et l'erreur est générée.
Vous ne pouvez pas avoir une propriété statique de la Current! Ce qui signifierait que vous utilisez toujours le même contexte, mais vous voulez que, conformément à la demande, et bien sûr, vous ne pouvez pas l'utiliser sur votre initialiseur comme il n'y a pas de demande du moment que la classe est initialisée. Il suffit de garder la IHttpContextAccessor dans la statique hélice, puis récupérer le contexte actuel à l'intérieur de GetAbsoluteUri
J'ai essayé de retirer la statique Contexte de la propriété et de l'accès au contexte actuel à l'intérieur de la GetAbsoluteUri() méthode, mais je reçois "la référence d'Objet n'est pas définie à une instance d'un objet" sur la ligne suivante à l'intérieur de la GetAbsoluteUri() méthode: HttpContext current = HttpContextAccessor.HttpContext;
stackoverflow.com/questions/4660142/... - assurez-vous que le HttpContextAccessor n'est pas nulle, car il doit avoir été définie dans la configuration de la méthode qui vous appelle sur votre startup

OriginalL'auteur eat-sleep-code | 2017-03-02