Qu'est-ce que l'ASP.NET Core, MVC, l'équivalent de la Demande.RequestURI?
J'ai trouvé un post de blog qui montre comment "shim" des choses familières comme HttpResponseMessage de retour dans ASP.NET Core, MVC, mais je veux savoir quel est le natif de façon à faire la même chose que le code suivant dans une méthode Post dans un Contrôleur:
//POST audit/values
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]string value)
{
var NewEntity = _repository.InsertFromString(value);
var msg = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created);
msg.Headers.Location = new Uri(Request.RequestUri + NewEntity.ID.ToString());
return msg;
}
Dans un ASP.NET Core projet MVC, je n'arrive pas à obtenir la Demande.RequestUri.
J'ai essayé de l'inspection de la Demande, et j'ai pu faire une fonction comme ceci:
private string UriStr(HttpRequest Request)
{
return Request.Scheme + "://" + Request.Host + Request.Path; //Request.Path has leading /
}
Donc je pourrais écrire UriStr(Request)
à la place. Mais je ne suis pas sûr que c'est un droit. Je me sens comme je suis le piratage de mon chemin, et ne l'utilisez pas correctement.
Un une question relative à la pour la version non-Core ASP.NET MVC versions demande comment faire pour obtenir l'url de base du site.
OriginalL'auteur Warren P | 2015-07-24
Vous devez vous connecter pour publier un commentaire.
D'une façon plus propre serait d'utiliser un
UriBuilder
:(pas testé, le code peut nécessiter quelques ajustements)
Bien sûr, ils ont laissé beaucoup de choses sur. En gros, c'est réécrite à partir du sol. Et, c'est encore en version bêta.
Les fragments ne sont pas inclus. Exemple
http://website.com/#about-us
Les uri peuvent également contenir des noms d'utilisateur et mots de passe, qui ne sont pas comptabilisés dans cet extrait de code.
aussi ne gère pas les numéros de port de l'hôte. utilisation:
builder.Host = request.Host.Host; builder.Port = request.Host.Port ?? -1;
OriginalL'auteur Thomas Levesque
Personnellement, j'utilise :
GetDisplayUrl est une méthode d'extension de l'espace de noms suivant : Microsoft.AspNetCore.Http.Extensions
un élégant! :+1
Doit être accepté de répondre.
C'est certainement beaucoup plus propre, et plus susceptibles de prendre en charge les cas de bord qu'une solution pourrait négliger. Cependant, il ya une chose à propos de ce qui soulève un drapeau rouge pour moi. Son but est uniquement pour l'affichage. À partir des commentaires: > Retourne le combiné composants de l'URL de la requête dans un échappent complètement échappé form > (sauf pour la QueryString) convient uniquement pour l'affichage. Ce format ne devrait pas > utilisés dans les en-têtes HTTP ou autre HTTP opérations. Je ne sais pas ce que l'affichage de fonctionnalités spécifiques, il est, mais il pourrait ne pas jouer gentiment avec l'Uri constructeur.
Après avoir écrit tout ça, je vois maintenant il y a une méthode plus appropriée dans le même paquet: GetEncodedUrl.
OriginalL'auteur t.ouvre
Voici un code qui fonctionne. C'est basé sur @Thomas Levesque réponse qui ne fonctionne pas bien lorsque la demande est à partir d'un port personnalisé.
Les uri peuvent également contenir des noms d'utilisateur et mots de passe, qui ne sont pas comptabilisés dans cet extrait de code.
OriginalL'auteur Dealdiane