ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门

一、前言

1、本文主要内容

  • ASP.NET Core MVC路由工作原理概述
  • ASP.NET Core MVC带路径参数的路由示例
  • ASP.NET Core MVC固定前/后缀的路由示例
  • ASP.NET Core MVC正则表达式匹配路由示例
  • ASP.NET Core MVC路由约束与自定义路由约束
  • ASP.NET Core MVC RouteAttribute绑定式路由使用介绍

2、本教程环境信息

软件/环境 说明
操作系统 Windows 10
SDK 2.1.401
ASP.NET Core 2.1.3
IDE Visual Studio Code 1.27
浏览器 Chrome 69

本篇代码基于上一篇进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02

3、前置知识

你可能需要的前置知识

  • MVC框架/模式介绍

https://baike.baidu.com/item/mvc

  • 正则表达式

http://www.runoob.com/regexp/regexp-tutorial.html

二、ASP.NET Core MVC 路由简介

1、ASP.NET Core MVC路由工作原理概述

ASP.NET Core MVC路由的作用就是将应用接收到请求转发到对应的控制器去处理。

应用启动的时候会将路由中间件(RouterMiddleware)加入到请求处理管道中,并将我们配置好的路由加载到路由集合(RouteCollection)中。当应用接收到请求时,会在路由管道(路由中间件)中执行路由匹配,并将请求交给对应的控制器去处理。

另外,需要特别注意的是,路由的匹配顺序是按照我们定义的顺序从上之下匹配的,遵循是的先配置先生效的原则。

2、路由配置参数说明

参数名 说明
name 路由名称,不可重复
template 路由模板,可在模板中以{name}格式定义路由参数
defaults 配置路由参数默认值
constraints 路由约束

在路由配置中,MVC框架内置了两个参数,controller,action。
路由匹配通过后,需要根据这两个参数将当前请求交由对应的Controller+Action去处理。所以,这两个参数缺少任何一个,都会导致路由无法正常工作。
通常我们有两个选择:

  • 在template中指定{controller},{action}参数
  • 在默认值中为controller、action指定默认值

三、ASP.NET Core MVC 路由示例

1、准备工作

为了方便我们进行测试,我们先准备好承接路由的Controller&Action

  • 创建TutorialController

在Controllers文件夹下新增控制器TutorialController.cs并继承于Controller

using System;
using Microsoft.AspNetCore.Mvc;

namespace Ken.Tutorial.Web.Controllers
{
    public class TutorialController : Controller
    {
      
    }
}

  • 增加Action:Index
public IActionResult Index()
{
    return Content("ASP.NET Core Tutorial by ken from ken.io");
}
  • 增加Action:Welcome
public IActionResult Welcome(string name, int age)
{
    return Content($"Welcome {name}(age:{age}) !");
}

2、带路径参数的路由

路由配置:

routes.MapRoute(
        name: "TutorialPathValueRoute",
        template: "{controller}/{action}/{name}/{age}"
    );

此路由适配URL:

  • /tutorial/welcome/ken/20

不适配URL:

  • /tutorial/welcome/ken

如果我们希望不在路径中设置age,也可以被路由到,那么可以将age指定为可选参数,将模板中的{age}修改为{age?}即可

routes.MapRoute(
        name: "TutorialPathValueRoute",
        template: "{controller}/{action}/{name}/{age?}"
    );

此路由适配URL:

  • /tutorial/welcome/ken/20
  • /tutorial/welcome/ken
  • /tutorial/welcome/ken?age=20

3、固定前后缀的路由

固定前缀路由配置:

routes.MapRoute(
    name: "TutorialPrefixRoute",
    template: "jiaocheng/{action}",
    defaults: new {
    controller = "Tutorial" }
);

此路由适配URL:

  • /jiaocheng/index
  • /jiaocheng/welcome

由于路径参数中不包含controller参数,所以需要在默认值中指定。

固定后缀路由配置

routes.MapRoute
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值