with tutorial started net mvc example asp asp.net-web-api self-hosting

asp.net-web-api - tutorial - web api methods



Intentando solicitar el agente de usuario en asp.net web api self host (5)

.NET Core 2.0 (+)

Tan simple como Request.Headers["User-Agent"] (regresa como cadena);)

Estoy tratando de obtener el user-agent en un host de API web y lo estoy haciendo mal, o la API web está alterando la cadena del agente de usuario.

He intentado utilizar varios métodos para obtener la cadena y todos devuelven los mismos resultados, en lugar de la excepción "Mozilla / 5.0 (Windows NT 6.2; WOW64) AppleWebKit / 537.31 (KHTML, como Gecko) Chrome / 26.0.1410.28 Safari /537.31 ", solo obtengo" Mozilla / 5.0 ".

He intentado:

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

¿Estoy haciendo esto mal, es auto host así que no tengo un contexto para trabajar.


La manera más simple de obtener el agente de usuario completo desde un controlador WebAPI es haciendo esto:

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

Da exactamente el mismo resultado que hacer el paso manual de esta manera:

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



Vaya, lo descubrí, respondiéndolo yo mismo en caso de que alguien más se encuentre con esto. Aparentemente, el usuario-agente se corta.

Esto me da el agente de usuario completo:

// 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;

Esto funcionó para mí si solo quieres el nombre del navegador, simplemente escribe:

var browserdetail = request.browser

Y si quieres la dirección IP del cliente, simplemente hazlo:

var browserdetail = request.hostaddress y var browserdetail = request.hostaddress para generar la clave token para autenticación.