iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >实现ASP.NET Core自动生成小写破折号路由的方法
  • 448
分享到

实现ASP.NET Core自动生成小写破折号路由的方法

2023-06-14 11:06:26 448人浏览 独家记忆
摘要

这篇文章主要讲解了“实现ASP.net core自动生成小写破折号路由的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“实现ASP.net core自动生成小写破折号路由的方法”吧!默认情

这篇文章主要讲解了“实现ASP.net core自动生成小写破折号路由的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“实现ASP.net core自动生成小写破折号路由的方法”吧!

默认情况下,ASP.Net Core使用如 Http://localhost:5000/HomeIndex 类的大驼峰路由。但是如果想使用小写的路由,并且这些路由用破折号分隔:http://localhost:5000/home-index它们比较常见且一致。

举例.net常见路由http://localhost:5000/User/ListPages想要的效果http://localhost:5000/user/list-pages

1、如何生成小写的路由可以这样设置

services.ConfigureRouting(setupAction => {    setupAction.LowercaseUrls = true;});

2、生成带破折号并且小写的路由可以这样设置

[Route("dashboard-settings")]class DashboardSettings:Controller {    public IActionResult Index() {        // ...    }}

似乎上面使用特性路由可以解决这个问题。但是我不想使用,因为每个action都要手动去设置,太繁琐也很容易出错。

我想要的效果是在程序中写个扩展类做到可配置处理。

3、解决方案

以下支持asp.net Core Version>=2.2

要做到这一点,首先创建SlugifyParameterTransfORMer类应该如下所示

public class SlugifyParameterTransformer : IOutboundParameterTransformer{    public string TransformOutbound(object value)    {        // Slugify value        return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();    }}

3.1 对于Asp.Net Core2.2 mvc:

在StartUp中ConfiregeServices这样配置

services.AddRouting(option =>{    option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);});

路由如下配置:

app.UseMvc(routes =>{    routes.MapRoute(       name: "default",       template: "{controller:slugify}/{action:slugify}/{id?}",       defaults: new { controller = "Home", action = "Index" }); });

3.2  对于Asp.Net Core2.2 WEB api:

在StartUp中ConfiregeServices这样配置

public void ConfigureServices(IServiceCollection services){    services.AddMvc(options =>     {        options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);}

3.3 对于Asp.Net Core>=3.0 MVC:

在StartUp中ConfiregeServices这样配置

services.AddRouting(option =>{    option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);});

路由如下配置:

app.UseEndpoints(endpoints =>{    endpoints.MapAreaControllerRoute(        name: "AdminAreaRoute",        areaName: "Admin",        pattern: "admin/{controller:slugify=Dashboard}/{action:slugify=Index}/{id:slugify?}");    endpoints.MapControllerRoute(        name: "default",        pattern: "{controller:slugify}/{action:slugify}/{id:slugify?}",        defaults: new { controller = "Home", action = "Index" });});

3.4 对于Asp.Net Core>=3.0 Web API:

在StartUp中ConfiregeServices这样配置

services.AddControllers(options => {    options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));});

3.5 对于Asp.Net Core>=3.0 Razor Pages:

在StartUp中ConfiregeServices这样配置

services.AddRazorPages(options => {    options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer()));});

这样会使/Sys/UserList路由变为/sys/user-list

3.6 对于上面MVC项目,路由模板要调整很多,其实还可以通过实现IControllerModelConvention来实现。

public class DashedRoutinGConvention : IControllerModelConvention {        public void Apply(ControllerModel controller)        {            var hasRouteAttributes = controller.Selectors.Any(selector =>                                               selector.AttributeRouteModel != null);            if (hasRouteAttributes)            {                // This controller manually defined some routes, so treat this                 // as an override and not apply the convention here.                return;            }            foreach (var controllerAction in controller.Actions)            {                foreach (var selector in controllerAction.Selectors.Where(x => x.AttributeRouteModel == null))                {                    var template = new StringBuilder();                    if (controllerAction.Controller.ControllerName != "Home")                    {                        template.Append(PascalToKebabCase(controller.ControllerName));                    }                    if (controllerAction.ActionName != "Index")                    {                        template.Append("/" + PascalToKebabCase(controllerAction.ActionName));                    }                    selector.AttributeRouteModel = new AttributeRouteModel()                    {                        Template = template.ToString()                    };                }            }        }        public static string PascalToKebabCase(string value)        {            if (string.IsNullOrEmpty(value))                return value;            return Regex.Replace(                value,                "(?<!^)([A-Z][a-z]|(?<=[a-z])[A-Z])",                "-$1",                RegexOptions.Compiled)                .Trim()                .ToLower();        }}

在StartUp中ConfiregeServices这样配置

public void ConfigureServices(IServiceCollection services){    // Add framework services.    services.AddMvc(options => options.Conventions.Add(new DashedRoutingConvention()));}

译文:https://stackoverflow.com/questions/40334515/automatically-generate-lowercase-dashed-routes-in-asp-net-core

译者:realyrare

出处:https://www.cnblogs.com/mhg215/

感谢各位的阅读,以上就是“实现ASP.NET Core自动生成小写破折号路由的方法”的内容了,经过本文的学习后,相信大家对实现ASP.NET Core自动生成小写破折号路由的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 实现ASP.NET Core自动生成小写破折号路由的方法

本文链接: https://www.lsjlt.com/news/270315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c#程序自启动怎么设置
    c# 程序的自启动方法有三种:注册表:在指定注册表项下创建新值,并将其设置为程序可执行文件路径。任务计划程序:创建一个新任务,并在触发器和动作部分分别指定登录时或特定时间触发,以及启动程...
    99+
    2024-05-14
    c#
  • c#怎么调用dll文件
    可在 c# 中轻松调用 dll 文件:引用 dll(使用 dllimport 特性)定义与 dll 函数签名匹配的函数原型调用 dll 函数(如同 c# 函数)附加技巧:使用 chars...
    99+
    2024-05-14
    c#
  • 如何构建 Golang RESTful API,并实现 CRUD 操作?
    通过创建 golang 项目并安装必要的包,我们可以构建一个功能齐全的 restful api。它使用 mysql 数据库进行 crud 操作:1. 创建和连接数据库;2. 定义数据结构...
    99+
    2024-05-14
    go crud mysql git golang
  • c#怎么添加类文件
    在c#中添加类文件的步骤:1. 创建新项目,2. 添加新类,3. 为类添加代码,4. 在另一个类中引用新类。using语句引用类文件所在的命名空间;new运算符创建类的新实例;点运算符访...
    99+
    2024-05-14
    c#
  • 使用 C++ 构建高性能服务器架构的最佳实践
    遵循 c++++ 中构建高性能服务器架构的最佳实践可以创建可扩展、可靠且可维护的系统:使用线程池以重用线程,提高性能。利用协程减少上下文切换和内存开销,提升性能。通过智能指针和引用计数优...
    99+
    2024-05-14
    c++ 高性能服务器架构 数据访问
  • c#怎么添加字段
    在 c# 中添加字段包括以下步骤:声明字段:在类或结构中使用 字段类型 字段名; 语法声明字段。访问修饰符:用于限制对字段的访问,如 private、public、protected 和...
    99+
    2024-05-14
    c#
  • c#中怎么添加引用
    c# 中添加引用的方法有四种:使用 nuget 包管理器添加软件包。添加项目引用以包含其他项目。手动编辑项目文件 (.csproj) 以添加引用。从编译器命令行使用 /reference...
    99+
    2024-05-14
    c#
  • c#怎么创建文本文件
    在 c# 中创建文本文件的方法包括:创建 filestream 对象以打开或创建文件。使用 streamwriter 写入文本至文件。关闭 streamwriter 对象释放资源。关闭 ...
    99+
    2024-05-14
    c#
  • c#怎么定义属性
    如何在 c# 中定义属性 属性是一种编程构造,它包含一个 get 访问器和一个 set 访问器,允许以一种类属性的方式访问字段。它们提供了一种安全且封装的方式来访问和修改类的内部数据。 ...
    99+
    2024-05-14
    c#
  • 基于 C++ 的服务器架构的安全性考虑因素
    在设计基于 c++++ 的服务器架构时,安全考虑至关重要:使用 std::string 或 std::vector 避免缓冲区溢出。使用正则表达式或库函数验证用户输入。采用输出转义防止跨...
    99+
    2024-05-14
    安全性 关键词: c++ 服务器架构 c++ lsp
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作