路由:

web的请求到达后端服务时,controller(控制器)会处理传入的http请求并响应用户操作,请求的url会被映射到控制器的操作方法上。

此映射过程由应用程序中定义的路由规则完成。

ASP.NET.Core MVC中的路由

路由使用一对由UseRouting和UseEndPoints注册的中间件:

UseRouting向中间件管道添加路由匹配。此中间件会查看应用中定义的终结点集,并根据请求选择最佳匹配

UseEndpoints向中间件管道添加终结点执行。

asp.net.core有两种路由技术:常规路由和属性路由

常规路由:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseStaticFiles();app.UseMvcWithDefaultRoute();
}

默认路由模板{controller=Home}/{action = Index}/{id?},大多数的URL都会按照这个规则进行映射。问号表示 id 参数可有可无。

如果要定义自己的路径模板,要使用 UseMvc()方法,而不是 UseMvcWithDefaultRoute()方法。

app.UseMvc(routes =>
{routes.MapRoute("default","{controller=Home}/{action = Index}/{id?}");
});
//1、启用默认路由
app.UseStaticFiles();
app.UseRouting();
app.UseMvcWithDefaultRoute();//2、自定义路由模板
app.UseStaticFiles();
app.UseRouting();
app.UseMvc(routes =>
{routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");
});//3、使用UseEndpoints自定义路由模板
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");});

属性路由:

使用属性路由,可以在Controller或 Controller 的操作方法上应用Route属性。

在Startp.cs文件Configure方法中,我们只使用app.UseMvc();然后在Controller的Action方法上通过特性Route来配置。

 [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??1);return View(model);}public ObjectResult detail(){return new ObjectResult(_studentRepository.GetStudent(1));}}

在实际项目中运用到的例子---下载文件

[ApiExplorerSettings(IgnoreApi = true)]public class DownFileController : Controller{private ILogger _logger;/// <summary>/// 下载Pscan文件/// </summary>/// <param name="taskId"></param>/// <param name="DownloadFilePath"></param>/// <param name="fileNameList"></param>/// <returns></returns>[Route("[Controller]/{taskId}/{DownloadFilePath?}/{fileName?}")]public IActionResult GetDownFileMessage(string taskId, string DownloadFilePath, string fileName){try{if (fileName != null){//远程部署//string path = "/home/ftp_flow/Data/TaskData/" + taskId + "/" + DownloadFilePath;//string zipPath = "/Data/PscanDownFile/" + $"{DownloadFilePath+"/"+fileNameList}.zip";//本地调试string path = @"E:\beijingData\TaskData\" + taskId + "/" + DownloadFilePath;Console.WriteLine(path);var filePath = Path.Combine(path, fileName);if (System.IO.File.Exists(filePath)){Console.WriteLine(filePath);string fileExt = Path.GetExtension(filePath);//获取文件的ContentTypevar provider = new FileExtensionContentTypeProvider();var memi = provider.Mappings[fileExt];var stream = System.IO.File.OpenRead(filePath);Console.WriteLine("success");return File(stream, memi, Path.GetFileName(filePath));}else{return NotFound();}}else{return NotFound();}}catch (Exception ex){return NotFound();}}}

浅浅理解.net core的路由相关推荐

  1. 深度学习(二十二)Dropout浅层理解

    Dropout浅层理解 原文地址:http://blog.csdn.net/hjimce/article/details/50413257 作者:hjimce 一.相关工作 本来今天是要搞<Ma ...

  2. 深度学习(二十二)Dropout浅层理解与实现

    Dropout浅层理解与实现 原文地址:http://blog.csdn.net/hjimce/article/details/50413257 作者:hjimce 一.相关工作 本来今天是要搞< ...

  3. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系

    ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...

  4. 达内科技NTD1712浅浅解析数据在各个设备中如何传输的过程

    本文章重在浅浅讲解TCP/TP五层协议在各个设备中的是如何传输的,拓扑图如下. 例,在PC1和PC2上均有一个qq程序.PC1给PC2发送一个消息,I love you.把这句话定义为数据A. 它在本 ...

  5. 真-浅浅了解下音视频文件格式和相关概念

    真-浅浅了解下音视频文件格式和相关概念 散装知识,只是突然对这类知识感兴趣,想简单了解下,找到啥就记录啥,没有深入研究文件内部组成构造和底层实现技术和相关标准,毕竟内容挺多的,我也不是必须得学透,况且 ...

  6. 浅浅记录一下挂载阿里云盘到本地

    浅浅记录一下 OpenWrt挂载阿里云盘 我的路由器是redmiAX6S 买来后就刷了openwrt 之前有记录的哈 (要问为啥要刷 懂得都懂) 首先 根据看看自己的路由的cpu是什么架构 终端中输入 ...

  7. 浅浅地讨论一下为什么要学习编程!

    编程现在对很多人来说还是新事物, 大部分人会问为什么要学习编程呢? 随着对编程的了解, 不同的时间 一定会对编程有不同的认识. 所以这篇小文就浅浅地 讨论一下为什么 要学习编程. ☀ 高大上的说法 ☀ ...

  8. ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件

    虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...

  9. ASP.NET Core端点路由中三种让人困惑的路由函数

    早先提及了端点路由app.UseEndpoints, 端点路由强调的是端点和路由,其核心目的是将请求落地点与路由寻址方式解耦. <ASP.NET Core端点路由作用原理> 这里面有几个容 ...

最新文章

  1. 学习3dmax(四)
  2. 使用 TOGAF 9.1 框架與 ArchiMate 3.0 建模語言
  3. (23/24) webpack实战技巧:如何在webpack环境中使用Json
  4. lua--面向对象使用middleclass
  5. 02.elasticsearch_read_write模型基础
  6. jenkins 新手入门安装失败_树莓派安装jenkins,安安静静做个持续集成打包机
  7. 【Linux网络编程学习】socket API(socket、bind、listen、accept、connect)及简单应用
  8. 第七十七期:可自动生成代码,5款基于AI的开发工具
  9. 计算机主板另一个名称,主板名称太复杂 看这几点就秒懂了
  10. Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)
  11. 为什么说苹果是唯一在乎你隐私的科技公司?
  12. Loonframework-DAO-Alpha-0.1.0发布
  13. centos7 安装 卸载docker
  14. dlna和miracast可以共存吗_同屏镜像功能哪家强?DLNA miracast等技术解读
  15. 怎么使用SSH从服务器下载文件
  16. LOL易游网络验证破解总结
  17. GCC编译器高效利用cache的原理和参数
  18. 【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)
  19. AspectJ in Action 第2版 中文版 简明的内容
  20. 性能测试报告包括哪些内容?模板范文哪里找?看这里

热门文章

  1. 使用Vue开发项目(一)
  2. offsetWidthoffsetLeft详解
  3. 【SystemVerilog基础】$sformatf()/$sformat() 快速上手指南
  4. 第十三章 ALDS1_12_A:Minimum Spanning Tree 最小生成树
  5. bower 基本使用
  6. Teleport 开源堡垒机安装使用
  7. C/C++ 中的次方运算
  8. unity2d 换装功能实现
  9. git --rebase (develop|AM/REBASE)
  10. smarty模板的使用(1)