none
URL Redirect en Proyecto de tipo WebApi RRS feed

  • Pregunta

  • Buenas tardes, 

    Estoy desarrollando un proyecto de tipo WebApi donde hay varios controladores que obtienen peticiones y realizan determinadas acciones en base a los verbos HTTP.

    Quisiera saber si es posible que cuando la URL no apunte a un determinado controlador sea redireccionada a uno por defecto. (Siempre y cuando esta URL contenga 2 parámetros de tipo alfanuméricos).

    Por ejemplo si la URL es: http://midominio.com/Parametro1/Parametro2 (URL sin especificar el controlador) esta URL sea redireccionada a un controlador por defecto (por ejemplo http://midominio.com/Controlador/Parametro1/Parametro2).

    Estuve investigando y me parece que  el camino posible es hacer una regla de tipo redirect en el Web.config

    Otro posibilidad me parece que puede ser modificar la ruta por defecto del archivo WebApiConfig que genera el proyecto WebApi en la carpeta App_Start.

    En ambos casos me esta costando hallar una solución y quisiera saber si a alguien se le ocurre como podría llegar a ser.

    Espero ser claro en mi consulta.

    Muchas gracias.


    Bebeto



    • Editado Bebeto Cabrera martes, 24 de enero de 2017 20:04
    • Cambiado Joyce_AC miércoles, 25 de enero de 2017 22:52
    martes, 24 de enero de 2017 19:36

Respuestas

  • hola

    pero como harias para diferencia Parametro1 y Parametro2 de un controller y el action ?

     el tema es como armarias un routing para diferenciar cuando es un parametro y cuando es el action y el controller

    >>Estuve investigando y me parece que  el camino posible es hacer una regla de tipo redirect en el Web.config

    pero es webapi, estas en mvc las reglas las defines en el WebApiConfig, cuando usas

    config.Routes.MapHttpRoute(...

    alli es donde defines el routing el web.config no deberias tocarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Bebeto Cabrera viernes, 27 de enero de 2017 17:03
    martes, 24 de enero de 2017 20:24
  • Pude resolver el inconveniente agregando las siguientes rutas en el archivo WebApiConfig

        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API configuration and services
    
                // Web API routes
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
                config.Routes.MapHttpRoute(
                    name: "Imagen-2-Parametros",
                    routeTemplate: "img/{idSitio}/{idImagen}",
                    defaults: new { controller = "Imagen", uri = RouteParameter.Optional }
                );
    
                config.Routes.MapHttpRoute(
                    name: "Imagen-3-Parametros",
                    routeTemplate: "img/{idSitio}/{idImagen}/{width}",
                    defaults: new { controller = "Imagen", uri = RouteParameter.Optional }
                );
    
                config.Routes.MapHttpRoute(
                    name: "Imagen-4-Parametos",
                    routeTemplate: "img/{idSitio}/{idImagen}/{width}/{height}",
                    defaults: new { controller = "Imagen", uri = RouteParameter.Optional }
                );
            }
        }

    Puede que sea ineficiente ya que tuve que agregar una ruta por cantidad de parámetros recibidos, pero me soluciono el inconveniente por el momento.

    Gracias.


    Bebeto



    viernes, 27 de enero de 2017 17:02

Todas las respuestas

  • hola

    pero como harias para diferencia Parametro1 y Parametro2 de un controller y el action ?

     el tema es como armarias un routing para diferenciar cuando es un parametro y cuando es el action y el controller

    >>Estuve investigando y me parece que  el camino posible es hacer una regla de tipo redirect en el Web.config

    pero es webapi, estas en mvc las reglas las defines en el WebApiConfig, cuando usas

    config.Routes.MapHttpRoute(...

    alli es donde defines el routing el web.config no deberias tocarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Bebeto Cabrera viernes, 27 de enero de 2017 17:03
    martes, 24 de enero de 2017 20:24
  • Hola Leandro, gracias por responder tan pronto.

    Estaba pensando en utilizar el web.config ya que puedo realizar el trabajo previo a que la la ruta sea tomada por el analizador que redirije a un determinado recurso.

            <rewrite>
                <rules>				
                    <rule name="Prueba" stopProcessing="true">
                        <match url="ACÁ VA LA REGEX" />
                        <action type="Rewrite" url="http://localhost:56914/Test/DoTest/{R:1}/{R:2}" appendQueryString="false" />
                    </rule>
                </rules>
            </rewrite>

    Estaba pensando en hacer algo así, aunque pueda llegar ser deficiente esta forma ya que la opción del WebApiConfig se me complica aún más.

    Saludos.


    Bebeto

    martes, 24 de enero de 2017 20:39
  • ok

    pero esa url que estas definiendo indica un action y controller donde ingresar cuando usas Test/DoTest/

    si es asi entonces si puede hacerlo sin problemas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 24 de enero de 2017 20:58
  • Si es por eso que me parece mas útil usar el modulo rewriting del web.config ya que se como son las url esperadas y se donde redirigirlas en cada caso.

    Si pueden aportar algo relacionado a las expresiones regulares con respecto a los siguientes casos les agradezco:

    Caso 1:

    url entrante: http://midominio.com/img/P1/P2/P3/P4

    Donde:

    -  http://midominio.com/img/ es la ruta fija.

    - P1: Parametro 1: es de tipo alfabético (a-z A-Z) y obligatorio (es decir siempre viene incluido en la URL).

    - P2: Parametro 2: es de tipo numérico (0-9) y obligatorio (siempre viene incluído en la URL).

    - P3: Parametro 3: es de tipo numérico (0-9) y obligatorio (siempre viene incluído en la URL).

    - P4: Parametro 4: es de tipo numérico (0-9) y es variable (en algunos casos puede que este incluído en la URL).

    url saliente: http://midominio.com/Imagenes/Obtener/P1/P2/P3/P4

    Donde:

    - http://midominio.com/Imagenes/Obtener (Imágenes es el controlador y Obtener el action).

    - Lo restante de la url saliente son los parámetros ya mencionados.


    Caso 2:

    url entrante: http://midominio.com/P1/P2

    Donde:

    -  http://midominio.com/ es la ruta fija.

    - P1: Parametro 1: es de tipo numérico (0-9) y obligatorio (siempre viene incluído en la URL).

    - P2: Parametro 2: es de tipo alfabético (a-z A-Z) y obligatorio (es decir siempre viene incluido en la URL).

    url saliente: http://midominio.com/Seguimiento/Registrar/P1/P2

    Donde:

    - http://midominio.com/Seguimiento/Registrar (Seguimiento es el controlador y Registrar el action).

    - Lo restante de la url saliente son los parámetros ya mencionados.


    Bebeto

    miércoles, 25 de enero de 2017 12:48
  • Pude resolver el inconveniente agregando las siguientes rutas en el archivo WebApiConfig

        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API configuration and services
    
                // Web API routes
                config.MapHttpAttributeRoutes();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
                config.Routes.MapHttpRoute(
                    name: "Imagen-2-Parametros",
                    routeTemplate: "img/{idSitio}/{idImagen}",
                    defaults: new { controller = "Imagen", uri = RouteParameter.Optional }
                );
    
                config.Routes.MapHttpRoute(
                    name: "Imagen-3-Parametros",
                    routeTemplate: "img/{idSitio}/{idImagen}/{width}",
                    defaults: new { controller = "Imagen", uri = RouteParameter.Optional }
                );
    
                config.Routes.MapHttpRoute(
                    name: "Imagen-4-Parametos",
                    routeTemplate: "img/{idSitio}/{idImagen}/{width}/{height}",
                    defaults: new { controller = "Imagen", uri = RouteParameter.Optional }
                );
            }
        }

    Puede que sea ineficiente ya que tuve que agregar una ruta por cantidad de parámetros recibidos, pero me soluciono el inconveniente por el momento.

    Gracias.


    Bebeto



    viernes, 27 de enero de 2017 17:02