Pregunta

Hay una manera sencilla al utilizar ASP.NET 4.0 enrutamiento con Web Forms para producir una ruta que actuará como una especie de comodín?

Me parece que dentro de formularios Web, tiene que especificar una ruta para cada página - Busco a algún tipo de ruta genérica que se puede utilizar cuando se requiere nada específico, tal vez mapear directamente de camino a la ruta de acceso para .. .

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

¿Alguna sugerencia?

Gracias

¿Fue útil?

Solución

Se puede coincidir con todas las rutas restantes de esta manera:

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

En este caso, sabemos que todas las rutas, y queremos enviar nada más que una "falta" Página / 404. Sólo asegúrese de poner esto como la última ruta, ya que es un comodín y se captura todo.

Alternativamente, usted podría registrar una ruta de la misma manera, pero internamente hace mapeo a una página, por ejemplo:

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 extraños para evitar el desplazamiento horizontal, pero usted consigue el punto en general. Una vez más, asegúrese de que esto es el última ruta, de lo contrario va a manejar todos sus rutas.

Otros consejos

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, seguirá recibiendo un error de sintaxis, porque los picos de enrutamiento seguridad de los archivos .axd y no propiamente carga el JavaScript archivos necesarios para los controles de validación.

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