【问题标题】:Can Friendly URL features be used inside Global.asax?可以在 Global.asax 中使用友好 URL 功能吗?
【发布时间】:2013-10-18 14:56:48
【问题描述】:

我正在学习 ASP.NET 4.5,偶然发现了 this 关于友好 URL 的帖子。现在我使用的是 ASP.NET 4.5,事实证明,当我创建一个新的 ASP.NET 项目时,该功能已经启用并安装了。

假设我有以下网址:

http://somesite.com/Admin/Users/1/2/3

这应该映射到以下内容:

http://somesite.com/Admin/Users.aspx?a=1&b=2&c=3

这在Users.aspx.cs 中运行良好,但我也可以在Global.asax 中使用它吗?我试过了,以下方法返回空字符串:

string a = Request.GetFriendlyUrlFileExtension();
string b = Request.GetFriendlyUrlFileVirtualPath();
IList<string> c = Request.GetFriendlyUrlSegments();

【问题讨论】:

    标签: c# asp.net friendly-url


    【解决方案1】:

    我一直使用友好的网址,这是我在 Web 表单项目中所做的:

    全球 ASAX

     public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapPageRoute("About", "About", "~/About.aspx", true);
            routes.MapPageRoute("Add User", "Add User", "~/Add.aspx", true);
            routes.MapPageRoute("Login", "Login", "~/Login.aspx", true);
            routes.MapPageRoute("Map", "Map", "~/Map.aspx", true);
            routes.MapPageRoute("Register", "Register", "~/Register.aspx", true);
            routes.MapPageRoute(
                                           "ViewList",
                                           "ViewList/{c}/{s}", 
                                           "~/ViewList.aspx", 
                                           true
                                         );
            routes.MapPageRoute(
                                           "ViewUser",
                                           "ViewUser/{id}",
                                           "~/ViewUser.aspx",
                                           true
                                         );
            routes.MapPageRoute(
                                         "MyAccount",
                                         "MyAccount/{id}",
                                         "~/MyAccount.aspx",
                                         true
                                       );
        }
    

    页面接收查询字符串

    string city = RouteData.Values["c"].ToString();
    string state = RouteData.Values["s"].ToString();
    

    您不需要在此配置中拆分查询字符串值。

    【讨论】:

    • 是的,不幸的是,这不是我要问的。我尝试使用我在Users.aspx.cs 中询问的方法,它们按预期工作。我在Global.asax.cs 中尝试它们,一切都返回一个空字符串。
    • 我想我不明白你为什么需要或想要在全球范围内这样做?
    • 我正在尝试构建一个依赖于路径匹配的授权方法,由数据库中的一组表支持。也就是说,我需要知道用户请求的确切路径并过滤掉所有应该作为参数的段;我需要在Global.asax.cs 中执行此操作。我对其他想法持开放态度,所以如果你有想法,请开除。
    【解决方案2】:

    我不熟悉您所指的friendlyURL 包,但如果您想自己尝试一下,可以在这里编写一些自定义路由:

    在你的 global.asax 中

    using System.Web.Routing;
    
        void Application_Start(object sender, EventArgs e)
        {
            RegisterRoutes(RouteTable.Routes);
    
        }
    
        void RegisterRoutes(RouteCollection routes)
        {
            routes.MapPageRoute("Users", "Users/{*queryvalues}", "~/Users.aspx");
        }
    

    然后在您的 Users.aspx.cs 中,而不是从中获取值

        Request.QueryString["somekey"]
    

    你会从

    那里得到你的价值观
        //This makes an array of string values
        RouteData.Values["queryvalues"].ToString().Split('/')
    

    微软有一个例子here

    【讨论】:

    • 我阅读的教程没有告诉我设置任何路由,并且这些方法在Users.aspx.cs 中确实按预期工作。但是我想做的是在Global.asax.cs 中使用这些方法,不幸的是它们都返回空字符串。
    猜你喜欢
    • 2020-07-19
    • 2013-06-03
    • 2015-08-02
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2012-05-22
    相关资源
    最近更新 更多