Asp.Net Core MVC的路由在Startup.cs文件中的Configure方法中进行配置,使其加入到Http请求管道中,如果不配置,那么我们所发送的请求无法得到象应。

  那么该怎么配置Asp.Net Core MVC的路由呢?通常是在Configure方法最后一行加入 app.UseMvcWithDefaultRoute(); 或者 app.UseMvc();

app.UseMvcWithDefaultRoute(); //使用默认路由

app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});

  通过此配置使得我们在浏览器可以通过 https://localhost:44338/home/details 来访问到HomeController下的Details这个Action。

  上述路由配置是我们熟悉的传统路由,我们也可以通过属性路由来配置,那么属性路由的配置方式是什么样的呢?在Startp.cs文件Configure方法中,我们只使用app.UseMvc();然后在Controller的Action方法上通过特性Route来配置。

        [Route("")]
[Route("home")]
[Route("/home/index")]
public IActionResult Index(int id)
{
return Json(_studentRepository.GetStudent(id));
//return Json(new { id = 1, name = "张三" });
} [Route("Home/Details/{id?}")]
public IActionResult Details(int? id)
{
Student model = _studentRepository.GetStudent(id??);
return View(model);
}

  这样我们也可以通过浏览器访问

  值得提醒的是,使用属性路由 [Route("Home/Details")] 时,这个路由和我们的控制器名称是没有什么关系的,也就是说,如果我们在StudentController这个控制器下的Index Action上应用 [Route("Home/Details")] 配置,在浏览器上使用/home/details一样是可以访问到StudentController的details的,只是如果我们只是直接返回return View(),我们通过浏览器访问会抛出异常,原因是Asp.Net MVC 默认会去/Views/Student/ , /Views/Shared/ , /Pages/Shared/下查找Details.cshtml。解决这个问题也很简单,可以通过使用绝对路径来实现。

 return View("~/Views/Home/Details.cshtml",student);

  但是,我们发现,使用属性路由的时候,我们需要在每个Action上面添加Route特性,这样如果每个控制器都有很多Action,添加起来就很烦人和繁琐。当然,Asp.Net Core MVC也给我们提供了简写的方式,但依然很繁琐,下面先来看一下

  [Route("[controller]/[action]")]
public class HomeController : Controller
{
private readonly IStudentRepository _studentRepository;
//构造函数注入
public HomeController(IStudentRepository studentRepository)
{
_studentRepository = studentRepository;
} [Route("")]
[Route("~/")] //解决 http://localhost:44338/ 访问不了问题
[Route("~/home")] //解决 http://localhost:44338/home 访问不了问题
public IActionResult Index(int id)
{
return Json(_studentRepository.GetStudent(id));
} [Route("{id?}")]
public IActionResult Details(int? id)
{
Student model = _studentRepository.GetStudent(id??);
return View(model);
} public ObjectResult detail()
{
return new ObjectResult(_studentRepository.GetStudent());
}
}
}

  所以我们可以总结一下,在大多数情况下使用传统路由的配置会比较方便,这实际上也是在实际工作中用得比较多的情况,而属性路由相比传统路由有了更大的灵活性,在一些特殊情况上可以使用,更多的是和传统路由搭配。

Asp.Net Core 入门(六)—— 路由的更多相关文章

  1. ASP.NET CORE 入门教程(附源码)

    ASP.NET CORE 入门教程 第一课 基本概念 基本概念 Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架 符合Web应用特点 .NET Core跨平台解决方案 ...

  2. ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门

    一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...

  3. ASP.NET Core入门(一)

    大家好,很荣幸您点了开此篇文章,和我一起来学习ASP.NET Core,此篇文字为<ASP.NET Core入门>系列中的第一篇,本系列将以一个博客系统为例,从第一行代码,到系统发布上线( ...

  4. 小白开学Asp.Net Core 《六》

    小白开学Asp.Net Core <六> —— 探究.Net Core 跨平台的奥秘 1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://gi ...

  5. 在ASP.NET Core中构建路由的5种方法

    原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...

  6. CentOS开发ASP.NET Core入门教程

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9891346.html 因为之前一直没怎么玩过CentOS,大多数时间都是使用Win10进行开发,然后程序 ...

  7. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  8. ASP.NET Core MVC的路由参数中:exists后缀有什么作用,顺便谈谈路由匹配机制

    我们在ASP.NET Core MVC中如果要启用Area功能,那么会看到在Startup类的Configure方法中是这么定义Area的路由的: app.UseMvc(routes => { ...

  9. 【翻译】ASP.NET Core 入门

    ASP.NET Core 入门 原文地址:Introduction to ASP.NET Core         译文地址:asp.net core 简介           翻译:ganqiyin ...

随机推荐

  1. supervisor 启动 celery 及启动中的问题

    一.前言 本教程重点在于supervisor的配置过程,celery的安装配置请参考其他教程 二.安装supervisor 1.安装命令 pip install supervisor # superv ...

  2. C#中的explicit和implicit了解一下吧

    今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);.貌似很久没用过这种隐式转换的写法了,因此重新温习一 ...

  3. 洛谷 - P1829 - Crash的数字表格 - 莫比乌斯反演

    求: \(S(n,m)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 显然: \(S(n,m)=\sum\limits_{i=1}^{n}\ ...

  4. hexo新建md文档推送到blog出错

    1. git错误提示 $ hexo g INFO Start processing FATAL Something's wrong. Maybe you can find the solution h ...

  5. 451. Sort Characters By Frequency (sort map)

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  6. 5-2 Windows消息队列 (25分)

    5-2 Windows消息队列   (25分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中 ...

  7. laravel C层 (控制器)

    <?php namespace App\Http\Controllers; use App\Index; use App\Http\Controllers\Controller; class I ...

  8. PHP保留小数的相关方法

    结合一下网上的例子 $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 但是这个如果没有两位小数也不会"两位精度" echo round($num, ...

  9. iOS开发 - 多线程实现方案之Pthread篇

    pthread基础 pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix.Linux.Windows等系统,跨平台.可移植,使用难度大,C语言框架,线程生命周期由程序 ...

  10. For循环执行AFNetworking请求

    屏幕快照 2017-12-19 下午1.46.25.png 需求:如下操作打印的文档为 NSLog(@"开始");for(NSIntegeri =0; i <5; i++) ...