Domanda

I C'è un modo semplice quando si utilizza ASP.NET 4.0 di routing con Web Forms per produrre un percorso che agirà come una sorta di jolly?

Mi sembra che all'interno WebForms, è necessario specificare un percorso per ogni pagina - Sto cercando un qualche tipo di percorso generico che può essere utilizzato in cui è richiesto nulla di specifico, forse la mappatura direttamente dal percorso al percorso così .. .

http://somedomain.com/folder1/folder2/page sarebbe eventualmente mappare cartella1 /folder2/page.aspx

Qualche suggerimento?

Grazie

È stato utile?

Soluzione

Si può abbinare tutte le rotte rimanenti in questo modo:

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

In questo caso, lo sappiamo tutte le rotte, e vogliamo inviare qualsiasi altra cosa ad una pagina "mancante" / 404. Basta essere sicuri di mettere questo come il ultima percorso, dal momento che è un jolly e prenderà tutto.

In alternativa si potrebbe registrare un percorso allo stesso modo, ma lo fa internamente mappatura a una pagina, in questo modo:

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

Questa classe del gestore avrebbe fatto la mappatura jolly, qualcosa di simile a questo:

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;
  }
}

Questa è rotto un po 'in posti strani per evitare lo scorrimento orizzontale, ma si ottiene il punto generale. Anche in questo caso, assicurarsi che questo è il ultima percorso, altrimenti occuperemo di gestire tutti i percorsi.

Altri suggerimenti

Inoltre - Tenete a mente che è necessario aggiungere un'eccezione per i file axd nel file Global.asax se ci sono controlli di convalida nel vostro web app:

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

In caso contrario, si può mantenere sempre un errore di sintassi, perché le scelte di routing il backup dei file axd e non propriamente carichi file necessari il codice JavaScript per i controlli di convalida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top