2010-04-24 15 views
12

¿Hay una manera simple cuando se utiliza enrutamiento ASP.NET 4.0 con formularios web para producir una ruta que actuará como un tipo de comodín?asp.net 4.0 enrutamiento de formularios web - ruta predeterminada/comodín

Me parece que dentro de WebForms, debe especificar una ruta para cada página: estoy buscando algún tipo de ruta genérica que pueda usarse donde no se requiera nada específico, tal vez mapeando directamente de la ruta a la ruta. ..

http://somedomain.com/folder1/folder2/page sería posible asignar a carpeta1/carpeta2/Page.aspx

¿Alguna sugerencia?

Gracias

Respuesta

22

puede hacer coincidir todas las rutas restantes como este:

routes.MapPageRoute("defaultRoute", "{*value}", "~/Missing.aspx"); 

En este caso, se conocen todas las rutas, y quieren enviar algo más que una "falta" Página/404. Solo asegúrese de poner esto como la última ruta, ya que es un comodín y atrapará todo.

alternativa usted puede registrar una ruta de la misma manera, pero internamente hace mapeo a una página, así:

routes.Add(new Route("{*value}", new DefaultRouteHandler())); 

Esa clase de controlador haría su asignación de comodín, algo como esto:

public class DefaultRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
    //Url mapping however you want here: 
    var pageUrl = requestContext.RouteData.Route.Url + ".aspx"; 

    var page = BuildManager.CreateInstanceFromVirtualPath(pageUrl, typeof(Page)) 
       as IHttpHandler; 
    if (page != null) 
    { 
     //Set the <form>'s postback url to the route 
     var webForm = page as Page; 
     if (webForm != null) 
     webForm.Load += delegate { webForm.Form.Action = 
            requestContext.HttpContext.Request.RawUrl; }; 
    } 
    return page; 
    } 
} 

Esto se rompe un poco en lugares impares para evitar el desplazamiento horizontal, pero se obtiene el punto general. Una vez más, asegúrese de que esta sea la última ruta, de lo contrario, manejará todas sus rutas.

+0

¿Es posible entonces hacer algo como: Perspectiva Dim As String = Page.RouteData.Values ​​("* value") Sé que es cuando no es un comodín, pero ¿qué pasa con un comodín? – davemackey

+1

Recibo el siguiente error. ¿Qué me estoy perdiendo? (.Net 4.5) System.Web.Routing.RouteBase 'no contiene una definición para' Url 'y no se pudo encontrar ningún método de extensión' Url 'que aceptara un primer argumento de tipo' System.Web.Routing.RouteBase '(son ¿falta una directiva de uso o una referencia de ensamblado?) – HGMamaci

0

Además - Tenga en cuenta que es necesario agregar una excepción para los archivos .axd en su archivo Global.asax si hay controles de validación en su aplicación web:

http://basgun.wordpress.com/2010/10/25/getting-syntax-error-in-asp-net-routing-due-to-webresource-axd/

De lo contrario, se quiere sigue obteniendo un error de sintaxis porque el enrutamiento recoge los archivos .axd y no carga correctamente los archivos JavaScript necesarios para los controles de validación.

+0

El enlace es privado o el blog es privado. – GoldBishop

Cuestiones relacionadas