asp.net 4.0 web forms routing - default/wildcard route

后端 未结 2 1750
花落未央
花落未央 2020-12-03 08:43

I there a simple way when using ASP.NET 4.0 routing with Web Forms to produce a route that will act as some kind of wildcard?

It seems to me that within WebForms, yo

相关标签:
2条回答
  • 2020-12-03 08:59

    Additionally - Keep in mind that you need to add an exception for the .axd files in your Global.asax file if there are validation controls in your web app:

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

    Otherwise, you will keep getting a syntax error because the routing picks up the .axd files and not properly loads the JavaScript files needed for the validation controls.

    0 讨论(0)
  • 2020-12-03 09:12

    You can match all remaining routes like this:

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

    In this case, we know all routes, and want to send anything else to a "missing"/404 page. Just be sure to put this as the last route, since it is a wildcard and will catch everything.

    Alternatively you could register a route the same way, but internally does mapping to a page, like this:

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

    That handler class would do your wildcard mapping, something like this:

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

    This is broken a bit in odd places to prevent horizontal scrolling, but you get the overall point. Again, make sure this is the last route, otherwise it'll handle all your routes.

    0 讨论(0)
提交回复
热议问题