I tienen el siguiente caso donde quiero aceptar las siguientes rutas deasp.net mvc - Route de cadena o int (es decir/Tipo/23 o/Tipo/sombreros)
'/type/view/23' or '/type/view/hats'
donde 23 es el ID para sombreros.
El controlador es como la siguiente:
public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(int id)
{
...
}
}
Ahora si pasan en 23 no hay problemas. Si pasan sombreros, tengo algo de trabajo que hacer. Ahora me preguntaba si en este caso traduciría sombreros a 23 usando un ActionFilter que mira si el valor pasó porque el ID es un int (de ser así, compruebe que existe en la base de datos) o si se ve una cadena la base de datos para saber cuál es la identificación de la cadena que se ha pasado. En cualquier caso, si no se encuentra una coincidencia, me gustaría redirigir al usuario a una acción diferente.
En primer lugar es el enfoque que he nombrado correcto, en segundo lugar es posible hacer una redirección desde dentro de un ActionFilter.
Saludos Anthony
a pensar en encontrar una manera para que el marco para hacer el trabajo, podría tener dos derrotas como la siguiente: this._Routes.MapRoute ("TypeInt" , "tipo/vista/{id}", nuevo {controlador = "Tipo", acción = "ViewInt"}, nuevo {página = @ "^ \ d + $"}); this._Routes.MapRoute ("TypeString", "tipo/vista/{id}", nuevo {controlador = "Tipo", acción = "ViewString"}); ¿Valdría la pena hacer esto? o ¿crees que solo haces el análisis de prueba? –
No veo lo que gana agregando complicaciones a la infraestructura de enrutamiento, excepto que hace el análisis sintáctico para usted. No soy lo suficientemente inteligente como para saber si funcionaría sin realmente probarlo.Personalmente, probablemente tenga dos acciones diferentes, View y ViewByName, que usan el mismo método privado para generar los datos una vez que se ha encontrado el producto correcto. Para mí eso sería aún más simple y claro. – tvanfosson