J'essaie d'obtenir l'agent utilisateur dans un auto-hôte API Web et je le fais mal, ou l'API Web elle-même modifie la chaîne de l'agent utilisateur.
J'ai essayé d'utiliser plusieurs méthodes pour obtenir la chaîne et elles renvoient toutes les mêmes résultats, au lieu de l'exception "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, comme Gecko) Chrome/26.0.1410.28 Safari /537.31 ", je ne reçois que" Mozilla/5.0 ".
J'ai essayé:
var header = request.Headers.SingleOrDefault(h => h.Key == "User-Agent").Value.First();
var header = request.Headers.UserAgent.SingleOrDefault().Product.ToString();
var header = request.Headers.GetValues("User-Agent").FirstOrDefault();
Suis-je en train de mal faire, c'est auto-hôte donc je n'ai pas de contexte avec lequel travailler.
La façon la plus simple d'obtenir l'agent utilisateur complet à l'intérieur d'un contrôleur WebAPI est la suivante:
var userAgent = Request.Headers.UserAgent.ToString();
Cela donne exactement le même résultat en faisant l'étape manuelle comme ceci:
// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);
Aussi simple que Request.Headers["User-Agent"]
(retourne sous forme de chaîne);)
Oups, compris, en répondant moi-même au cas où quelqu'un d'autre se heurterait à cela. Apparemment, l'agent utilisateur est coupé.
Cela me donne l'agent utilisateur complet:
// Default empty user agent.
String userAgent = "";
// Get user agent.
if (Request.Headers.Contains("User-Agent"))
{
var headers = request.Headers.GetValues("User-Agent");
StringBuilder sb = new StringBuilder();
foreach (var header in headers)
{
sb.Append(header);
// Re-add spaces stripped when user agent string was split up.
sb.Append(" ");
}
userAgent = sb.ToString().Trim();
}
var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;
Cela a fonctionné pour moi si vous ne voulez que le nom du navigateur, alors écrivez simplement:
var browserdetail = request.browser
Et si vous voulez l'adresse IP des clients, faites simplement:
var browserdetail = request.hostaddress
et l'utiliser pour générer une clé de jeton pour l'authentification.