【问题标题】:asp.net 4.0 web forms routing - default/wildcard routeasp.net 4.0 网络表单路由 - 默认/通配符路由
【发布时间】:2011-02-11 20:35:32
【问题描述】:

当使用带有 Web 窗体的 ASP.NET 4.0 路由来生成将充当某种通配符的路由时,我有一种简单的方法吗?

在我看来,在 WebForms 中,您必须为每个页面指定一个路由 - 我正在寻找某种通用路由,可以在不需要任何特定的情况下使用,也许直接从路径映射到路径,所以.. .

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

有什么建议吗?

谢谢

【问题讨论】:

    标签: asp.net routing asp.net-4.0 wildcard-mapping


    【解决方案1】:

    另外 - 请记住,如果您的 Web 应用程序中有验证控件,您需要为 Global.asax 文件中的 .axd 文件添加一个例外:

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

    否则,您将不断收到语法错误,因为路由选择了 .axd 文件并且没有正确加载验证控件所需的 JavaScript 文件。

    【讨论】:

    • 链接是私有的,或者博客是私有的。
    【解决方案2】:

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

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

    在这种情况下,我们知道所有路由,并希望将其他任何内容发送到“丢失”/404 页面。请务必将此作为 last 路由,因为它是一个通配符,可以捕获所有内容。

    您也可以用同样的方式注册一个路由,但在内部会映射到一个页面,如下所示:

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

    这在奇怪的地方被打破了一点,以防止水平滚动,但你明白了整体观点。再次确保这是最后一个路线,否则它将处理您的所有路线。

    【讨论】:

    • 是否有可能做类似的事情: Dim前景 As String = Page.RouteData.Values("*value") 我知道它不是通配符,但是通配符呢?
    • 我收到以下错误。我错过了什么? (.Net 4.5)System.Web.Routing.RouteBase'不包含'Url'的定义,并且找不到接受'System.Web.Routing.RouteBase'类型的第一个参数的扩展方法'Url'(你是缺少 using 指令或程序集引用?)
    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多