Asp.Net Core 入门(六)—— 路由
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 入门(六)—— 路由的更多相关文章
- ASP.NET CORE 入门教程(附源码)
ASP.NET CORE 入门教程 第一课 基本概念 基本概念 Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架 符合Web应用特点 .NET Core跨平台解决方案 ...
- ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门
一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...
- ASP.NET Core入门(一)
大家好,很荣幸您点了开此篇文章,和我一起来学习ASP.NET Core,此篇文字为<ASP.NET Core入门>系列中的第一篇,本系列将以一个博客系统为例,从第一行代码,到系统发布上线( ...
- 小白开学Asp.Net Core 《六》
小白开学Asp.Net Core <六> —— 探究.Net Core 跨平台的奥秘 1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://gi ...
- 在ASP.NET Core中构建路由的5种方法
原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...
- CentOS开发ASP.NET Core入门教程
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9891346.html 因为之前一直没怎么玩过CentOS,大多数时间都是使用Win10进行开发,然后程序 ...
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- ASP.NET Core MVC的路由参数中:exists后缀有什么作用,顺便谈谈路由匹配机制
我们在ASP.NET Core MVC中如果要启用Area功能,那么会看到在Startup类的Configure方法中是这么定义Area的路由的: app.UseMvc(routes => { ...
- 【翻译】ASP.NET Core 入门
ASP.NET Core 入门 原文地址:Introduction to ASP.NET Core 译文地址:asp.net core 简介 翻译:ganqiyin ...
随机推荐
- Flex AIR操作文件系统
1.各种文件操作http://blog.csdn.net/zdingxin/article/details/6635376 2.file.browseForDirectory("请选择一个目 ...
- HDU5880【AC自动机】
题意: 给出n个字符串,再给出一个字符串,把之前出现过的字符串全部变成* 思路: AC自动机,Trie树上存的值是一个字符串的长度,也就是往前的长度,然后倒着处理一遍. 感想: 第三题AC自动机,本来 ...
- JAG Practice Contest for ACM-ICPC Asia Regional 2016 C题【贪心】
camp给出的题解: 题解:贪心,先算出最小需要的长度.然后从左到右依次确定每一位.复杂度O(n)O(n) 长度为 2n2n 的串可以构造出需要 [0,1+3+...+2n-1][0,1+3+...+ ...
- hdu5861【线段树】
题意: 有n个点,每个两两之间有一条路,给出每条路开放的花费,每条路只能打开关闭一次,然后m天里给出一个区间代表这条路必须在该天开放,求每天需要的花费. 思路: 这是一题纯粹用线段树搞的题. 我们可以 ...
- 在mpvue框架中使用Vant WeappUI组件库的注意事项
1如何引入组件库 有两种方法 1 npm下载 2 下载代码,下面介绍第二种方法. 在gitHub上, 链接如下 https://github.com/youzan/vant-weapp 首先在自己项目 ...
- python入门之实例-商品选择
需求: 显示一系列商品,根据序号选择商品 li = ["手机","电脑","电视"] #函数enumerate在for循环遍历的时候,会默认 ...
- Appium禁止appium setting和unlock在设备上重复安装
1.文件:/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-android-dri ...
- Maven + Docker
一.设置POM.xml <build> <finalName>ROOT</finalName> <plugins> <plugin> < ...
- cocos-js一些问题
1. setTexture和setSpriteFrame方法 修改精灵的里面的图片的时候如果是图片使用 var imgPath = "#" + this.imgName[idx] ...
- 如何查看和分析IIS日志
日志的在IIS中是很重要的,但是很多人却忽略了,在这里说说,日志格式建议使用W3C扩充日志文件格式,这也是IIS 5.0默认的格式,可以指定每天记录客户IP地址.用户名.服务器端口.方法.URI资源. ...