ASP.net MVC 支持带有连字符的 URL

2024-02-11

有没有一种简单的方法可以让 MvcRouteHandler 将传入 URL 的操作和控制器部分中的所有连字符转换为下划线,因为方法或类名称中不支持连字符。

这样我就可以支持诸如 example.com/test-page/edit-details 之类的结构映射到 Action edit_details 和控制器 test_pagecontroller,同时继续使用 MapRoute 方法。

我知道我可以指定操作名称属性并支持控制器名称中的连字符,从而手动添加路由来实现此目的,但是我正在寻找一种自动化方法,以便在添加新控制器和操作时保存错误。


John's Post 的 C# 版本,适合任何喜欢它的人:我的博客上有 C# 和 VB 版本 http://blog.didsburydesign.com/2010/02/how-to-allow-hyphens-in-urls-using-asp-net-mvc-2/

public class HyphenatedRouteHandler : MvcRouteHandler{
        protected override IHttpHandler  GetHttpHandler(RequestContext requestContext)
        {
            requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
            requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
            return base.GetHttpHandler(requestContext);
        }
    }

...以及新路线:

routes.Add(
            new Route("{controller}/{action}/{id}", 
                new RouteValueDictionary(
                    new { controller = "Default", action = "Index", id = "" }),
                    new HyphenatedRouteHandler())
        );

您也可以使用以下方法,但请记住,您需要将视图命名为 My-Action,如果您想让 Visual Studio 自动生成视图文件,这可能会很烦人。

[ActionName("My-Action")]
public ActionResult MyAction() {
    return View();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.net MVC 支持带有连字符的 URL 的相关文章

  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • 如何在 ASP.Net MVC 中执行 301 永久重定向路由

    如何在 ASP NET MVC 中执行 HTTP 301 永久重定向路由 创建一个继承自 ActionResult 的类 public class PermanentRedirectResult ActionResult public st
  • 使用 OWIN Identity 注册来自多个 API 客户端的 Web API 2 外部登录

    我想要以下架构 我为本示例编写了产品名称 在一台服务器上运行的 Web API 2 应用程序 http api prettypictures com http api prettypictures com 在另一台服务器上运行的 MVC 5
  • 管理面板的 htaccess 重写规则

    我的网络应用程序中有这样的 url 模式 www mysitename com foldername controller method 所有请求的页面首先被重定向到根文件夹上的index php 然后处理请求的页面 但每当我进入管理面板
  • 仅为登录用户显示菜单项

    我是 ASP NET MVC 新手 正在使用该框架的 1 0 版本 我有一个 site master 页面 其中包含以下硬编码菜单 div ul li li li li li li li li ul div
  • MVC4 捆绑:由于 css3 功能而缩小失败?

    我想使用 MVC4 捆绑和缩小 但我总是在未缩小的 css 文件中收到此错误消息作为注释 Minification failed Returning unminified contents 534 29 run time error CSS
  • 如何在 asp.net mvc 中跨应用程序进行表单身份验证

    如何在 asp net mvc 中跨应用程序进行表单身份验证 假设有两个网站 www xyz com 和 www abc com 我必须对两个站点使用相同的用户凭据 如果我将一个应用程序重定向到另一个应用程序 那么它不会要求登录 如果应用程
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • 如何绕过 ASP.NET Web API 中发现多个操作的异常

    当试图找到以下问题的解决方案时 默认操作的 MVC Web Api 路由不起作用 https stackoverflow com questions 11724749 mvc web api route with default actio
  • ASP.Net MVC AJAX 链接不起作用

    为了实现 AJAX 登录 我在我的页面上有这个链接 附近有一个 id 为 lll 的 div 当我单击该链接时 我得到了无聊的确认 只是出于调试目的而添加 没有它的行为是相同的 但然后什么也没有发生 没有请求到达服务器 因为我在 LogOn
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝
  • 限制实体框架中子实体的数量

    底线在前 有没有一种简洁的方法可以限制可以属于实体框架中父级的子实体的数量 我现在使用的是4 3 1 问题 我正在开发一个 ASP NET MVC3 站点 它通过使用实体框架的数据访问层访问数据 我有一个 SearchList 实体 它与搜
  • 如何在使用 ajax 和 JQuery 时加密发布数据?

    服务器端我们可以对用户进行身份验证 但我希望 ajax 或 JQuery 发送数据时数据安全 就像在客户端一样 某人只能看到加密格式的任何调用的参数 那么我该怎么做呢 我在这个网站上看到过这个场景 EDIT 当数据来自服务器时 我们可以忽略
  • MVC 操作过滤器和多线程

    我目前遇到了操作过滤器的线程问题 在我的应用程序上 我使用 ActionFilter 来执行每个操作的跟踪 此跟踪将提供统计信息 例如调用的持续时间 并记录参数被派往行动 实际的跟踪实现 由其他团队完成 使用 IDisposable 对象
  • 如何从 C# 中的两个列表中获取唯一对象?

    我有两个列表对象 例如 list1 id 101 name one id 102 name two id 103 name three list2 id 111 name one id 112 name two id 114 name fo
  • 通过 HttpClient 使用外部 REST Web 服务的存储库模式示例?

    我已经进行了相当多的搜索 但没有找到任何在 ASP NET MVC 应用程序中使用存储库模式使用外部 REST Web 服务的好示例 并且具有松散耦合和有意义的关注点分离 我在网上找到的几乎所有存储库模式示例都是编写 SQL 数据或使用 O
  • ASP.NET Core Tag Helper Checkbox 不保存未选中的值

    我正在使用标签帮助程序在 MVC 表单中添加一个复选框 div class form group div
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • 禁用视图中所需的验证特定字段 ASP.NET MVC 4

    如果有人能给我一些提示 我将不胜感激 我搜索了一段时间 我什至找到了一个帖子 我认为它可以解决我的问题 但它没有 在某些情况下禁用必需的验证属性 https stackoverflow com questions 5367287 disab

随机推荐

  • 使用 shell 脚本从 sql 脚本中选择列到局部变量中

    如何将从表中检索到的列值存储到 shell 脚本中的变量中 我有以下代码 usr bin ksh echo This script will try to connect to sql plus and displays the date
  • 为什么在释放指针后取消引用它时会得到不同的结果?

    我有一个关于 C 内存管理的问题 以及 Debian GNU Linux 下的 GCC 4 3 3 根据 K R 的 C 编程语言书籍 第 7 8 5 章 当我释放指针然后取消引用它时 会出现错误 但我有一些疑问 因为我注意到有时 正如我在
  • 在 Flask 中,设置 cookie,然后重定向用户

    看起来在 Flask 中 cookie 是通过直接修改响应对象来设置的 如何返回响应对象 同时在成功登录后将用户重定向到不同的页面 我想专门重定向用户而不是呈现不同的页面 以防用户点击刷新 这是我当前的代码 它仅显示同一页面 login h
  • popen()/fgets() 间歇性返回不完整的输出

    我遇到了一个奇怪的问题popen and fgetsLinux系统上的库函数 演示该问题的简短程序如下 安装信号处理程序SIGUSR1 创建辅助线程来重复发送SIGUSR1到主线程 在主线程中 通过以下方式重复执行一个非常简单的 shell
  • rsync 无法解释的错误(代码 129)

    我正在尝试将数据从一台服务器 rsync 到另一台服务器 大约有大约 1 1T 的数据 但是当我进行 rsync 时 我在传输过程中遇到以下异常 从而终止了进程 rsync 错误 rsync c 541 sender 3 0 7 出现无法解
  • uint8 的冗余转换不适用于 GCC 4.8.1

    我有一些遗留代码 通常是使用 GCC 3 4 4 为 PowerPC 编译的 现在我正在移植一些我想用 MinGW 的 GCC 4 8 1 编译的代码部分 在代码中的某个时刻我发现了这一点 Prototypes void foo uint8
  • 如何在不使用全局或会话变量的情况下重用查询结果以更快地导出到 csv 和 xls

    我有一个功能 最初以 HTML 报告 显示结果 然后 可以导出为 CSV 和 XLS 这个想法是重用用于呈现 HTML 的查询的结果 导出相同的记录 而无需再次重新运行查询 最接近的实现是这样的 将结果存储在全局变量 last consul
  • 如何在不移动 X、Y 位置的情况下缩放视图?

    我有一个RadioGroup我正在尝试缩小规模 因为它太大了 所以我用setScaleX and setScaleY 并将其缩小 它可以工作 但问题是当我缩放视图时 视图会改变 X 和 Y 位置 我希望它在缩放后保持相同的左上角坐标 如何让
  • 检查数字中是否有“数字”零的最快方法?

    检查数字中是否包含数字 0 的最快方法是什么 我需要开发一种快速方法 因为我必须在 20 美元秒内对接近 10 9 美元的数字执行这些检查 将其转换为字符串后搜索零是否有效 除以 2 的幂以外的数字 无论数字是多少 都将执行相同次数的运算
  • Swift 4:使用数组中的数据进行分页,以便在用户滚动时进行 API 调用

    背景 在我的应用程序中 我存储了一堆对象 ID 我使用这些 ID 进行批量 API 调用 API 将每次调用限制为 10 个 ID 号 该数据呈现在 UITableView 上 用户可以添加和删除对象 这会在数据库中添加或删除对象 ID 我
  • 重新启动应用程序时出现内存不足错误(Android)

    我正在开发一款使用 5 个大约 900x600 的大图像的游戏 当我退出游戏 按后退按钮 然后尝试启动游戏时 出现以下错误 12 29 15 59 16 633 E AndroidRuntime 18642 FATAL EXCEPTION
  • 在C#中,如何解析主机的IP地址?

    如何动态获取服务器 要连接的PC 的IP地址 系统 Dns GetHostEntry http msdn microsoft com en us library system net dns gethostentry aspx可用于将名称解
  • 使用 Convert_alpha 在 Pygame 中使图像背景透明

    我试图在 Pygame 脚本中使图像的背景透明 现在我的游戏背景是黑色的 而不是透明的 我在其他地方读过我可以使用的convert alpha 但似乎不起作用 这是我的代码 相关部分 import PIL gameDisplay pygam
  • 添加到 slack 与使用 slack 登录

    我已将 添加到 Slack 按钮添加到我的 Web 项目中 它工作得很好 就像交换访问令牌的代码并重定向到我选择的 URL 一样 现在 我对 使用 Slack 登录 按钮有点困惑 我知道它用于登录个人成员 那么它会要求他们提供组织电子邮件和
  • COUNT(*) 什么时候返回 NULL?

    你好 我有一个经常写信的同事ISNULL COUNT 0 但我一直以为COUNT 永远无法返回NULL 但后来我搜索了互联网 我的发现让我能够编写这段小代码 create table t1 val1 varchar 50 select co
  • 如何在NativeScript中访问android的R对象?

    我正在尝试访问 Android 的R我用 Angular 在 NativeScript 中尝试了一个对象 但我没有取得任何成功 说明here https www nativescript org blog using android bac
  • 如何在Anaconda下使用非mkl NumPy?

    Anaconda Python 发行版使用针对 Intel MKL 库编译的 NumPy 和相关包 而不是 标准 NumPy 如何在特定 conda 环境上将 Anaconda 与 标准 NumPy 一起使用 不幸的是 目前还不能选择使用其
  • 为什么我的调试器因仅指向 main.js 的链接而损坏

    我正在努力调试我的角度应用程序 这是我继承的一个应用程序 并努力寻找它无法工作的原因 当我尝试调试我的项目时 打开 chrome 调试器 我得到的只是对 main js 的引用 当我单击这些时 它不会将我带到正确的源代码行 正如评论中指出的
  • 如何将数据库中的所有表更改为UTF8字符集?

    我的数据库不是 UTF8 我想将所有表转换为 UTF8 我该怎么做 对于单表 你可以这样做 ALTER TABLE tab CONVERT TO CHARACTER SET utf8 COLLATE utf8 unicode ci 对于整个
  • ASP.net MVC 支持带有连字符的 URL

    有没有一种简单的方法可以让 MvcRouteHandler 将传入 URL 的操作和控制器部分中的所有连字符转换为下划线 因为方法或类名称中不支持连字符 这样我就可以支持诸如 example com test page edit detai