visual tutorial studio net mvc introducción español code asp c# asp.net-core asp.net-core-mvc

c# - tutorial - asp.net mvc



Asp.Net 5 MVC 6 detecta el navegador móvil (1)

¿Cómo es posible en Asp.Net 5 MVC 6 detectar si el usuario está en un dispositivo móvil?

En la versión anterior de Asp MVC se podía hacer así:

Request.Browser.IsMobileDevice

El problema es que Asp.Net 5 no usa el espacio de nombres System.Web .

La variable Request en las acciones del controlador ahora es de tipo Microsoft.AspNet.Http.HttpRequest , la versión anterior era de tipo System.Web.HttpRequestBase .

Microsoft.AspNet.Http.HttpRequest no contiene la propiedad del Browser . Traté de buscar en otras propiedades, pero no encontré nada.

EDITAR: como se solicitó, algunos recursos demuestran que Asp.Net 5 ya no usa System.Web . De la documentación de Asp.Net

ASP.NET 5 ya no se basa en System.Web.dll, sino que se basa en un conjunto de paquetes NuGet granulares y bien factorizados que le permiten optimizar su aplicación para que tenga justo lo que necesita.


La implementation de Request.Browser.IsMobileDevice basó en los archivos .browser , que AFAIK no son parte de ASP.Net 5.

Veamos si alguien del equipo puede arrojar algo de luz sobre cómo planean implementar esto. Hay una entrada en los documentos asp sobre vistas específicas para dispositivos móviles, por lo que deben tener algunos planes para ello.

Mientras tanto, supongo que puedes crear tu propio método de ayuda analizando la cadena de consulta, por ejemplo, usando la expresión regular de detectmobilebrowsers.com . Para una expresión regular alternativa (y menos extensa), vea detectar un navegador móvil en SO.

Siguiendo esta idea, una solución temporal como este método de extensión podría ayudar mientras el equipo asp proporciona su solución:

public static class RequestExtensions { //regex from http://detectmobilebrowsers.com/ private static readonly Regex b = new Regex(@"(android|bb/d+|meego).+mobile|avantgo|bada//|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)//|plucker|pocket|psp|series(4|6)0|symbian|treo|up/.(browser|link)|vodafone|wap|windows ce|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline); private static readonly Regex v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s/-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|/-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw/-(n|u)|c55//|capi|ccwa|cdm/-|cell|chtm|cldc|cmd/-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc/-s|devi|dica|dmob|do(c|p)o|ds(12|/-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(/-|_)|g1 u|g560|gene|gf/-5|g/-mo|go(/.w|od)|gr(ad|un)|haie|hcit|hd/-(m|p|t)|hei/-|hi(pt|ta)|hp( i|ip)|hs/-c|ht(c(/-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i/-(20|go|ma)|i230|iac( |/-|//)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |//)|klon|kpt |kwc/-|kyo(c|k)|le(no|xi)|lg( g|//(k|l|u)|50|54|/-[a-w])|libw|lynx|m1/-w|m3ga|m50//|ma(te|ui|xo)|mc(01|21|ca)|m/-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(/-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)/-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|/-([1-8]|c))|phil|pire|pl(ay|uc)|pn/-2|po(ck|rt|se)|prox|psio|pt/-g|qa/-a|qc(07|12|21|32|60|/-[2-7]|i/-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55//|sa(ge|ma|mm|ms|ny|va)|sc(01|h/-|oo|p/-)|sdk//|se(c(/-|0|1)|47|mc|nd|ri)|sgh/-|shar|sie(/-|m)|sk/-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h/-|v/-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl/-|tdg/-|tel(i|m)|tim/-|t/-mo|to(pl|sh)|ts(70|m/-|m3|m5)|tx/-9|up(/.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|/-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(/-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas/-|your|zeto|zte/-", RegexOptions.IgnoreCase | RegexOptions.Multiline); public static bool IsMobileBrowser(this HttpRequest request) { var userAgent = request.UserAgent(); if ((b.IsMatch(userAgent) || v.IsMatch(userAgent.Substring(0, 4)))) { return true; } return false; } public static string UserAgent(this HttpRequest request) { return request.Headers["User-Agent"]; } }