Pregunta

Se me presenta un problema con el uso de variables de cadena de consulta en una aplicación RESTful Asp.net MVC. ¿Eso viola el patrón RESTful?

La cuestión es que Asp.net MVC usa una ruta predeterminada como:

/controller/action/id

Tengo que pasar por otra combinación de controlador + acción como:

/controller/action/id/controllerX/actionX

pero esto no funcionará si estuviera en la raíz de mi aplicación, porque los primeros tres parámetros se omitirán y los dos últimos se tratarán como la primera pareja.

En lugar de esto, estoy tentado a usar esta notación en su lugar:

/controller/action/id?Param=controllerX/actionX

Lo que también funcionaría en root

http://domain/?Param=controllerX/actionX

¿Pero es REST?

Un poco de explicación

Quiero tener un enfoque más modular para mis vistas que el incorporado normal con PartialViews. Porque si tengo una vista parcial que se muestra en muchas páginas, tengo que agregar datos de video para esa vista parcial en particular en cada acción de controlador que devuelve una vista que usa esa vista parcial en particular. Y creo que es una forma incorrecta de hacer las cosas. Los controladores se vuelven dependientes de vistas parciales que pueden (o que dios prohíba no puede ) formar parte de la vista principal.

las acciones de renderización en lugar de vistas parciales vienen al rescate. Uso mi propio Html.RenderAction () que llama a la acción de algún controlador que prepara sus propios datos únicamente. Genial, esto funciona bien.

El primer problema fue con el método HTTP que se propagó a todas las acciones de RenderAction. Así que lo cambié y puedo controlar el método HTTP a mi gusto. Es posible que algunas acciones siempre estén usando GET, sin importar si la vista principal se devolvió (por lo tanto, usando POST).

El problema es cuando estas acciones devuelven vistas parciales con sus propios elementos FORM. Dado que mis acciones secundarias no se pueden publicar directamente (porque no sabrían qué vista devolver), en realidad se publican en la vista. Todas las subacciones con formularios generalmente han propagado el método HTTP desde la vista principal, por lo que en realidad ingresarán en la ejecución de la acción de devolución.

El problema es que solo la forma real que se estaba publicando debería ejecutar su acción POST. Otros deberían usar el método GET. Aquí es donde entra en juego mi segundo controlador / acción. Cada forma de acción secundaria publica de nuevo en

mainViewController/action/?PostForm=controller/action

donde el segundo parámetro ayuda a decidir qué representación de acción secundaria debe propagar el método POST. Esa forma particular será validada como se define en su acción posterior.

Espero que esto explique mi problema un poco más con un ejemplo concreto. Este problema está relacionado con mi pregunta de ayer .

¿Fue útil?

Solución

Si esta URL resultará en la misma vista devuelta sin la dependencia de la sesión o las cookies o el historial de navegación anterior de un cliente, entonces sí, será lo que usted llama RESTful.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top