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

0 下载量 158 浏览量 更新于2024-08-04 收藏 18KB DOCX 举报
ASP.NET Core 自动化生成小写破折号路由的方法主要涉及对不同版本的 ASP.NET Core MVC、WebAPI 和 Razor Pages 的配置调整。本文档将介绍如何实现这一功能,以创建更加友好的 URL 格式。 1、如何生成小写的路由 在 ASP.NET Core 中,默认路由会遵循大驼峰命名规则。为了改变这一行为,可以在 `Startup.cs` 文件中的 `ConfigureServices` 方法里,注入 `IRouteBuilder` 并设置路由约束: ```csharp services.AddRouting(options => { options.LowercaseUrls = true; }); ``` 这将确保生成的所有路由都自动转换为小写。 2、生成带破折号并且小写的路由 除了小写路由之外,我们还需要在控制器动作名称中添加破折号。这可以通过自定义路由模板或者使用 `IApplicationModelConvention` 接口实现。以下是一个使用自定义路由模板的例子: ```csharp [Route("[controller]-[action]")] public class HomeController : Controller { // ... } ``` 3、解决方案 3.1 对于 Asp.NetCore 2.2 MVC: 在 `ConfigureServices` 方法中,除了设置 `LowercaseUrls` 之外,你可能还需要在每个控制器上手动添加上述的自定义路由模板。 3.2 对于 Asp.NetCore 2.2 WebAPI: 与 MVC 类似,设置 `LowercaseUrls` 并在每个 API 控制器上添加自定义路由模板。 3.3 对于 Asp.NetCore >= 3.0 MVC: 在 `ConfigureServices` 方法中应用小写和破折号的策略,可以通过实现 `IEndpointRouteBuilder`: ```csharp app.UseEndpoints(endpoints => { endpoints.MapControllers().RequireHost("localhost:5000") .WithTemplate("{controller=Home}-{action=Index}"); }); ``` 3.4 对于 Asp.NetCore >= 3.0 WebAPI: 与 MVC 框架类似,使用 `MapControllers` 并自定义路由模板。 3.5 对于 Asp.NetCore >= 3.0 Razor Pages: Razor Pages 可以通过在 `Startup.cs` 的 `ConfigureServices` 方法中注册一个自定义 `PageRouteModelConvention` 实例来实现: ```csharp services.AddRazorPages(options => { options.Conventions.AddPageRouteModelConvention("/", model => { foreach (var selector in model.Selectors) { var attributeRouteModel = selector.AttributeRouteModel; if (attributeRouteModel != null) { attributeRouteModel.Template = attributeRouteModel.Template.ToLower() .Replace(" ", "-"); } } }); }); ``` 3.6 通过实现 `IControllerModelConvention`: 对于 MVC 项目,还可以创建一个类来实现 `IControllerModelConvention`,并在 `Apply` 方法中遍历所有控制器和动作,自定义路由模板。这种方法可以让改动更集中,适用于多个版本的 ASP.NET Core。 在以上步骤中,关键在于理解 ASP.NET Core 的路由机制,并根据项目所使用的框架版本进行相应的配置。通过这些方法,你可以确保路由不仅使用小写字母,还包含破折号分隔,从而提供更加标准化和易读的 URL。这不仅可以提高用户体验,还有助于搜索引擎优化(SEO)。