我在使用ASP.NET 4.0与Web表单的路由来产生将充当某种通配符的路由时有一种简单的方法?

在我看来,在WebForms中,您必须为每个页面指定一条路由 - 我正在寻找可以在不需要具体的地方使用的某种通用路由,也许可以直接从路径到达路径映射SO ...

http://somedomain.com/folder1/folder2/page 可能会映射到folder1/folder2/page.aspx

有什么建议么?

谢谢

有帮助吗?

解决方案

您可以匹配这样的所有剩余路线:

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

在这种情况下,我们知道所有路线,并希望将其他任何内容发送到“丢失”/404页面。只要确保将其作为 最后的 路线,因为它是通配符,并且会抓住一切。

另外,您可以以相同的方式注册路线,但在内部映射到页面,这样的路线:

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

那个处理程序课将进行您的通配符映射,类似的事情:

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

这在奇怪的地方有些破坏,以防止水平滚动,但是您会得到总体意见。再次,确保这是 最后的 路线,否则会处理 全部 您的路线。

其他提示

另外 - 请记住,如果您的Web应用程序中有验证控件,则需要添加global.asax文件中的.axD文件的异常:

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

否则,您将继续遇到语法错误,因为该路由会拾取.axd文件,并且无法正确加载验证控件所需的JavaScript文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top