Quel est l’équivalent ASP.NET Core MVC de Request.RequestURI?

J’ai trouvé un article de blog qui montre comment “relier” des choses familières telles que HttpResponseMessage dans ASP.NET Core MVC, mais je souhaite savoir quelle est la nouvelle façon native de faire la même chose que le code suivant dans une méthode REST Post Manette:

// POST audit/values [HttpPost] public System.Net.Http.HttpResponseMessage Post([FromBody]ssortingng value) { var NewEntity = _repository.InsertFromSsortingng(value); var msg = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created); msg.Headers.Location = new Uri(Request.RequestUri + NewEntity.ID.ToSsortingng()); return msg; } 

Dans un projet ASP.NET Core MVC, je n’arrive pas à obtenir Request.RequestUri.

J’ai essayé d’inspecter Request et j’ai pu créer une fonction comme celle-ci:

 private ssortingng UriStr(HttpRequest Request) { return Request.Scheme + "://" + Request.Host + Request.Path; // Request.Path has leading / } 

Je pourrais donc écrire UriStr(Request) place. Mais je ne suis pas sûr que c’est vrai. Je sens que je me fraye un chemin et que je ne l’utilise pas correctement.

Une question connexe concernant les versions antérieures non principales d’ASP.NET MVC non essentielles explique comment obtenir l’URL de base du site.

Une méthode plus propre consisterait à utiliser un UriBuilder :

 private static Uri GetUri(HttpRequest request) { var builder = new UriBuilder(); builder.Scheme = request.Scheme; builder.Host = request.Host.Value; builder.Path = request.Path; builder.Query = request.QuerySsortingng.ToUriComponent(); return builder.Uri; } 

(non testé, le code peut nécessiter quelques ajustements)

Personnellement, j’utilise:

 new Uri(request.GetDisplayUrl()) 

GetDisplayUrl est une méthode d’extension issue de l’espace de noms suivant: Microsoft.AspNetCore.Http.Extensions

Voici un code de travail. Ceci est basé sur la réponse de @Thomas Levesque, qui ne fonctionnait pas bien lorsque la demande provient d’un port personnalisé.

 public static class HttpRequestExtensions { public static Uri ToUri(this HttpRequest request) { var hostComponents = request.Host.ToUriComponent().Split(':'); var builder = new UriBuilder { Scheme = request.Scheme, Host = hostComponents[0], Path = request.Path, Query = request.QuerySsortingng.ToUriComponent() }; if (hostComponents.Length == 2) { builder.Port = Convert.ToInt32(hostComponents[1]); } return builder.Uri; } }