2010-07-02 28 views
5

estoy buscando hacer algo similar a este post:Omitir nombre del controlador de MVC URL

How to hide controller name in Url?

sólo sin ningún tipo de identificación.

El servidor ejecuta IIS 6 y las páginas ya se muestran sin extensiones, por lo que no es un problema de comodín.

estoy buscando para golpear http://website.com/action-name

tengo http://website.com/controller/action-name trabajo

Estoy asumiendo que esto es sólo un simple cambio de enrutamiento que de alguna manera estoy haciendo el tonto para arriba. Mi regla de encaminamiento actual es:

routes.MapRoute(
    "RouteName", 
"{action}", 
new { controller = "Home", action = "Index" } 
); 

Respuesta

7

es su nueva regla de enrutamiento posicionada anterior la regla de enrutamiento por defecto de {controller, action, id} para que tenga la oportunidad de igualar primera?

+0

buen punto, bien, ¿es obligatorio tener una ruta predeterminada con acción e id? puedo tener solo un controlador como este: 'routes.MapRoute ( name:" Default ", url:" {controller} ", predeterminados: nuevo {controller =" Home "} );' – stom

+1

@stom: No, no es obligatorio, pero es una buena idea. La regla de enrutamiento predeterminada le da a la aplicación un lugar donde ir si se presenta una ruta que no coincide con ninguna de las rutas personalizadas. –

2

El problema es la ruta por defecto es probablemente todavía en su lugar por lo que es coincidente primero y el impago del resto de las entradas que espera. En función de su comentario de que el controller/action está funcionando, me hace pensar que no lo eliminó o que aparece primero. ¿Puedes publicar tu RegisterRoutes completo?

Intente hacer la ruta que definió la primera ruta y debería coincidir con casi cualquier cosa que pase en ella.

EDIT: Agregado lo que su RegisterRoutes debe ser similar:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // This will match anything so if you have something very specific with hard coded 
    // values or more items that will need to be match add them here above but do not 
    // add defaulted values so it can still fall through to this. 
    routes.MapRoute( 
     "RouteName", 
     "{action}", 
     new { controller = "Home", action = "Index" }); 
} 
Cuestiones relacionadas