【问题标题】:Dynamic ASP.NET MVC Routes动态 ASP.NET MVC 路由
【发布时间】:2023-03-24 21:55:01
【问题描述】:

我对 MVC 路由感到困惑。假设我有这个域:poopoopants.com。我想要一些来自根目录的标准 URL,它们可以转到“关于”页面或“联系”页面:

http://poopoopants.com/about
http://poopoopants.com/contact

现在,我还将在下面有无限数量的这两条路线,其中“[user]”是在 poopoopants.com 上注册帐户的人的用户名的变量,而 [file-path ] 是一个 URL 清理文件路径可能包含 / 字符

http://poopoopants.com/[user]
http://poopoopants.com/[user]/[file-path]

所以我假设我有一个IndexController 和一个Index 操作用于/About 操作用于/aboutContact 操作用于/contact,还有一个UserController/[user]/ 使用Index 操作,对/[user]/[file-path] 使用File 操作。

我的问题与Global.asax.cs 中的明确路线有关。到目前为止,我得到了:

routes.MapRoute("Index", "/", new { controller = "Index", action = "Index" });
routes.MapRoute("About", "/about", new { controller = "Index", action = "About" });
routes.MapRoute("Contact", "/contact", new { controller = "Index", action = "Contact" });

但是我为 /[user] 和 /[user]/[file-path] 路由指定了什么,它们在UserController 中的操作的相应方法签名是什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    我没有测试它们,但它应该可以工作:

    路线:

    routes.MapRoute(
        "User",
        "{username}",
        new { controller = "User", action = "Index" }   
    );
    
    routes.MapRoute(
        "File",
        "{username}/{filepath}",
        new { controller = "User", action = "File" }
    

    方法签名:

    public ActionResult Index(string username);
    public ActionResult File(string username, string filepath);
    

    另外,您可以在一个 MapRoute 子句中设置您的索引控制器路由。

    有用的工具:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

    【讨论】:

    • 我不得不将“文件”路由的 URL 参数更改为“{username}/{*filepath}”以支持其中包含“/”的文件路径,但这非常有效——谢谢!
    • 嗯,我不明白我怎么能有一个联系人和关于的路线,因为用户路线将捕获任何未明确定义为路线的东西,对吧?
    • 是的,我错了。快速测试证明 ;) 很高兴我能提供帮助,祝你的项目好运。
    猜你喜欢
    • 2011-02-01
    • 2011-01-07
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多