【问题标题】:ASP.NET MVC Routing: Clean Urls - from camel case to hyphenated wordsASP.NET MVC Routing: Clean Urls - 从驼峰式到连字符
【发布时间】:2013-09-03 05:11:44
【问题描述】:

我目前在我的控制器中定义了一个动作:

    // GET: /schools/:cleanUrlName/data-loggers
    public ActionResult DataLoggers(string cleanUrlName)
    {
        return View();
    }

这在我点击“/schools/brisbane-state-high-school/dataloggers”时有效,但是 - 根据评论 - 我想通过更简洁的网址(使用连字符)访问它:“/schools/brisbane -州立高中/数据记录器”。我知道我可以编写一条路线来实现这一点,但我希望我不必为每个多字动作/控制器编写一条新路线。有没有更好的方法来解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    您可以使用ActionNameAttribute 为您的操作名称创建别名。

    所以你只需要注释你的多字动作:

    [ActionName("data-loggers")]
    public ActionResult DataLoggers(string cleanUrlName)
    {
        return View("DataLoggers");
    }
    

    但由于这也会影响视图发现,因此您需要返回 View("DataLoggers"),因此您最好为多字操作创建自定义路由。

    【讨论】:

    • 如果您想要一些更通用的解决方案,您可以查看 IIS url 重写功能,或者您可以从 Route 派生并删除操作名称的连字符并覆盖 GetRouteData 方法...
    • 太棒了!我想我会使用ActionName,因为与每条路线所需的几条线路相比,它只是一条线路。我觉得如果我为每个多字动作写一条路线,RouteConfig 会变得非常大。谢谢。
    • 我不能再像here 所说的那样使用dash 添加视图,尝试时会出现:The name is not allowed to contain any of these characters: . - @ <,。所以我想唯一的解决方案是在添加后重命名视图
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2015-05-11
    • 1970-01-01
    相关资源
    最近更新 更多