ASP.NET Core实现小写破折号路由的方法
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)。
2023-05-15 上传
2023-05-20 上传
2023-05-15 上传
2023-05-18 上传
2023-05-21 上传
2023-05-20 上传
2023-05-20 上传
2023-05-19 上传
mmoo_python
- 粉丝: 2206
- 资源: 1万+
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构