• asp.net core mvc之路由


    一、默认路由 (Startup.cs文件)

    1. routes.MapRoute(
    2. name: "default",
    3. template: "{controller=Home}/{action=Index}/{id?}"
    4. );

    默认访问可以匹配到
    https://localhost:44302/home/index/1
    https://localhost:44302/home/index
    https://localhost:44302/home
    https://localhost:44302

    也可以匹配到
    https://localhost:44302/course/learn/1

    1、创建 course 控制器

    Controllers文件夹下右键-,添加控制器->

    -》CourseController.cs

    ->

    2、创建learn视图

    在Views文件夹下,新建 Course 文件夹,然后右键 。 添加-》视图-》learn.cshtml

    1. @{
    2. ViewData["Title"]= "学习";
    3. }
    4. 学习页面内容

    二、案例博客路由

    1、在 Startup.cs 文件下配置博客路由

    1. //防止输入https://localhost:44302/home跳到博客专用路由
    2. routes.MapRoute(
    3. name: "home",
    4. template: "home", //https://localhost:44302/home,跳到Home控制器中Index方法
    5. defaults: new { controller = "Home", action = "Index" }
    6. );
    7. //博客专用路由
    8. routes.MapRoute(
    9. name:"blog",
    10. template:"{name}", //https://localhost:44302/博客名,跳到Blog控制器中Index方法
    11. defaults: new { controller ="Blog",action="Index"}
    12. );

    2、Controllers文件夹右键,添加-》控制器 BlogController.cs

    1. public class BlogController : Controller
    2. {
    3. public IActionResult Index(string name)
    4. {
    5. ViewData["BlogName"] = name;
    6. return View();
    7. }
    8. }

    3.Views文件夹下添加Blog文件夹右键,添加-》视图 Index.cshtml

    @ViewData["BlogName"]博客

    三、特性路由

    特性路由:在Action添加标注,来指定路由规则

    1、Startup.cs 文件中 app.UseMvc(删除全部路由);

    2、在Action添加标注

    1. public class HomeController : Controller
    2. {
    3. [Route("")]
    4. [Route("home")]
    5. [Route("home/index")]
    6. public IActionResult Index()
    7. {
    8. return View();
    9. }
    10. [Route("home/abc")]//https://localhost:44302/home/abc
    11. public IActionResult About()
    12. {
    13. ViewData["Message"] = "Your application description page.";
    14. return View();
    15. }

    注意:

    A、如果2个方法有相同标注,为防止冲突,可以这样做

    [HttpPost("home/abc")]

    B、特性路由参数

    1. //学习
    2. [Route("course/learn/{id}")] //https://localhost:44302/course/learn/1
    3. public IActionResult learn(int id)
    4. {
    5. return View();
    6. }

    四、组合路由

    组合路由:在 Controller 和Action 上添加路由标注

    1. //课程
    2. [Route("c")]
    3. public class CourseController : Controller
    4. {
    5. [Route("index")] // https://localhost:44302/c/index
    6. [Route("/idd")] // 以/开头的不是组合路由 https://localhost:44302/idd
    7. public IActionResult Index()
    8. {
    9. return View();
    10. }
    11. }

    五、路由模板中使用标记替换


    在路由模板中使用
    [controller] 表示和控制器同名的名称
    [action] 表示和Action同名的名称
    [area] 表示和区域同名的名称

    1. [Route("[controller]")]
    2. public class CourseController : Controller
    3. {
    4. [Route("[action]")] // https://localhost:44302/course/index
    5. public IActionResult Index()
    6. {
    7. return View();
    8. }

    还可以在控制器上面使用多个路由特性,实现多个地址匹配一个控制器

    1. [Route("[controller]")]
    2. [Route("more")] // https://localhost:44302/more/index
    3. public class CourseController : Controller
    4. {
    5. [Route("[action]")] // https://localhost:44302/course/index
    6. public IActionResult Index()
    7. {
    8. return View();
    9. }

    还可以这样写

    1. [Route("[controller]/[action]")] //https://localhost:44302/course/index
    2. //也可以放到方法上
    3. public class CourseController : Controller
    4. {
    5. public IActionResult Index()
    6. {
    7. return View();
    8. }

    六、自定义路由特性

    通过创建一个实现了IRouteTemplateProvider的类。然后在类里面配置Template和Order还有Name这三个属性就可以实现特性标注了。

    只要那个类或者Action增加了这个自定义标注就可以自动设置上面的Template特性。

    1、在项目下添加 core 文件夹,然后添加 MyRouteAttribute.cs 类,实现 IRouteTemplateProvider

    1. namespace FirstCoreMvc.core
    2. {
    3. public class MyRouteAttribute : Attribute, IRouteTemplateProvider
    4. {
    5. public string Template => "www/[controller]/[action]";
    6. public int? Order {get;set;}
    7. public string Name { get; set; }
    8. }
    9. }

    2、调用

    1. public class BlogController : Controller
    2. {
    3. [MyRoute] //https://localhost:44302/www/blog/index
    4. public IActionResult Index(string name)
    5. {
    6. ViewData["BlogName"] = name;
    7. return View();
    8. }
    9. }

    七、生成Url

    生成url,实际应用在视图中生成链接的地址

    1. public IActionResult Index()
    2. {
    3. //return Content(Url.Action("index")); // /home
    4. //return Content(Url.Action("index", "home")); // /home
    5. return Content(Url.Action("index", "course", new { id = 1, name = "lili" }));
    6. // /course/index/1?name=lili 和我想像/course/index?id=1&1name=lili不一样,有人知道吗?
    7. }

    八、区域的使用

    1、点击项目右键-》添加-》新搭建基架的项目-》MVC区域-》添加-》区域名称:Manage

     2、添加控制器视图

    1. namespace FirstCoreMvc.Areas.Manage.Controllers
    2. {
    3. [Area("Manage")] //需要添加区域注释,否则会和外边路由冲突
    4. public class HomeController : Controller
    5. {
    6. public IActionResult Index()
    7. {
    8. return View();
    9. }
    10. }
    11. }

    注意:[Area("Manage")]  需要添加区域注释,否则会和外边路由冲突

    3、startup.cs文件中路由设置

    1. //区域路由 放到上面
    2. routes.MapAreaRoute("mange_area","Manage","manage/{controller=Home}/{action=Index}/{id?}");

  • 相关阅读:
    【Flutter】widgets (1) 组件概述 widget tree 常见的widgets
    JavaScript动画库:Anime.js
    c#WinFrom自定义图表仪表控件-频谱
    sqlite3数据库Linux 系统移植和使用
    Python设置进程名称
    在 Python 中使用 Fsolve
    图像运算和图像增强三
    yolov5自动训练/预测-小白教程
    RecyclerView设置GridLayoutManager隐藏item无效
    Android开发中Button背景颜色不能修改问题及解决方法
  • 原文地址:https://blog.csdn.net/tiz198183/article/details/134277066