web-dev-qa-db-fra.com

Essayer d'obtenir l'agent utilisateur à partir de la demande dans l'auto-hôte de l'API Web asp.net

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.

39
casualtek

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);
73
Seb Nilsson

. NET Core 2.0 (+)

Aussi simple que Request.Headers["User-Agent"] (retourne sous forme de chaîne);)

4

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();
}
0
casualtek
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.

0
Gaurav Dubey