2009-07-01 17 views
7

Estoy teniendo un problema complicado (trátenme como soy nuevo en MVC) al tratar de usar un controlador (y una ruta posteriormente) con el nombre PropertiesController .ASP.NET MVC Enrutamiento con un controlador llamado "PropertiesController"

Creo que esto se debe a que hay un directorio (que realmente no puedo eliminar) llamado "Propiedades" en mi solución. ¿Hay alguna forma de evitar esto?

La configuración de ruta es una ruta sencilla:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Properties", action = "List", id = "" } // Parameter defaults 
); 

y el error que consigo en IIS7 al solicitar "http://localhost/aptment2/properties/" es:

alt text

Seguramente hay una manera alrededor de esto que simplemente no puedo encontrar? Aclamaciones.

+0

¿Está intentando navegar directamente a esa vista o está pasando por la página predeterminada.aspx primero (como con un F5 o Ctrl + F5)? Solo curiosidad por eludir el registro de la ruta, lo que sucede si tienes esa vista configurada como la página de inicio en lugar de default.aspx. – nkirkes

+0

acaba de quemar 2 horas tratando de depurar esto, tiene que recordar a su SO la próxima vez – mxmissile

+0

Lo que es aún más complicado es el url 'properties/index 'funciona. – mxmissile

Respuesta

4

Desde que alguien más está teniendo el mismo problema, supongo que se está ejecutando en una palabra clave reservada aquí (me imagino ClassControllers están fuera así).

No es la primera vez que ocurre: profundizando en las partes internas del medio ambiente, you can't route to Windows' reserved keywords either.

2

Ejecutando una prueba rápida, me sale el mismo comportamiento. ¿Es una opción viable usar algo que no sea Propiedades?

+0

Preferiría no hacerlo si fuera posible, después de todo, la idea de MVC es que usted tiene el control completo y su esquema de nomenclatura de URL debe ser lo más limpio posible. –

+0

Bueno, más o menos. Esa es la idea detrás del enrutamiento, no necesariamente solo MVC, pero a pesar de ello, MVC rige en ciertas convenciones y eso incluye no usar palabras reservadas o nombres de otros recursos. Sugeriría que se busque bloquear más esa definición de ruta (añadiré una edición con una sugerencia) o que aparezca un nombre diferente para tu controlador. – nkirkes

+0

Intenté bloquear la ruta un poco más y obtuve el mismo resultado. Puede que sea SOL sobre esto, pero tendré curiosidad de ver si hay una forma de evitarlo. – nkirkes

0

No sé si es una opción para usted, pero podría intentar deshabilitar el enrutamiento a los archivos existentes.

routes.RouteExistingFiles = false; 
4

Tengo una configuración PropertiesController en una aplicación MVC 3 configurada para usar IIS Express. No entiendo el error exacto que hace, pero es similar (documento no predeterminado 404.20) y estoy seguro de que es por la misma razón.

No causa ningún problema en nuestro entorno de producción ya que publicamos una versión compilada de la aplicación y luego no tiene una carpeta de Propiedades.

Para solucionar el problema al desarrollar localmente, tengo todo mi contenido estático (scripts/css/etc ...) en un único directorio y lo ignoro mientras también activo RouteExistingFiles.

routes.IgnoreRoute("static/{*wildcard}"); 
    routes.RouteExistingFiles = true; 

Esto solucionó mi problema y ahora puedo buscar example.com/properties/ error free.

Cuestiones relacionadas