Подтвердить что ты не робот

Попытка получить пользовательский агент от запроса в asp.net web api self host

Я пытаюсь получить пользовательский агент в собственном хосте web api, и я либо делаю это неправильно, либо сам web api изменяет строку пользовательского агента.

Я попытался использовать несколько методов для получения строки, и все они возвращают одни и те же результаты, а не только "Mozilla/5.0 (Windows NT 6.2, WOW64) AppleWebKit/537.31 (KHTML, например, Gecko) Chrome/26.0.1410.28 Safari/537.31", я получаю только "Mozilla/5.0".

Я пробовал:

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();

Я делаю это неправильно, это сам хост, поэтому у меня нет контекста для работы.

4b9b3361

Ответ 1

Самый простой способ получить полный пользовательский агент из WebAPI-контроллера:

var userAgent = Request.Headers.UserAgent.ToString();

Он дает точно такой же результат, как это делает ручной шаг:

// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);

Ответ 2

.NET Core 2.0 (+)

Так же просто, как Request.Headers["User-Agent"] (возвращается как строка);)

Ответ 3

var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;

Это сработало для меня, если вы хотите только имя браузера, а затем просто напишите:

var browserdetail = request.browser

И если вам нужен адрес ip-адреса клиентов, просто выполните:

var browserdetail = request.hostaddress и использовать его для       генерирование ключа токена для аутентификации.

Ответ 4

Ой, разобрался, отвечая на него сам, если кто-то еще столкнется с этим. По-видимому, пользовательский агент получает измельчение.

Это дает мне полный пользовательский агент:

// 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();
}