浅浅理解.net core的路由
路由:
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的路由相关推荐
- 深度学习(二十二)Dropout浅层理解
Dropout浅层理解 原文地址:http://blog.csdn.net/hjimce/article/details/50413257 作者:hjimce 一.相关工作 本来今天是要搞<Ma ...
- 深度学习(二十二)Dropout浅层理解与实现
Dropout浅层理解与实现 原文地址:http://blog.csdn.net/hjimce/article/details/50413257 作者:hjimce 一.相关工作 本来今天是要搞< ...
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...
- 达内科技NTD1712浅浅解析数据在各个设备中如何传输的过程
本文章重在浅浅讲解TCP/TP五层协议在各个设备中的是如何传输的,拓扑图如下. 例,在PC1和PC2上均有一个qq程序.PC1给PC2发送一个消息,I love you.把这句话定义为数据A. 它在本 ...
- 真-浅浅了解下音视频文件格式和相关概念
真-浅浅了解下音视频文件格式和相关概念 散装知识,只是突然对这类知识感兴趣,想简单了解下,找到啥就记录啥,没有深入研究文件内部组成构造和底层实现技术和相关标准,毕竟内容挺多的,我也不是必须得学透,况且 ...
- 浅浅记录一下挂载阿里云盘到本地
浅浅记录一下 OpenWrt挂载阿里云盘 我的路由器是redmiAX6S 买来后就刷了openwrt 之前有记录的哈 (要问为啥要刷 懂得都懂) 首先 根据看看自己的路由的cpu是什么架构 终端中输入 ...
- 浅浅地讨论一下为什么要学习编程!
编程现在对很多人来说还是新事物, 大部分人会问为什么要学习编程呢? 随着对编程的了解, 不同的时间 一定会对编程有不同的认识. 所以这篇小文就浅浅地 讨论一下为什么 要学习编程. ☀ 高大上的说法 ☀ ...
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...
- ASP.NET Core端点路由中三种让人困惑的路由函数
早先提及了端点路由app.UseEndpoints, 端点路由强调的是端点和路由,其核心目的是将请求落地点与路由寻址方式解耦. <ASP.NET Core端点路由作用原理> 这里面有几个容 ...
最新文章
- 学习3dmax(四)
- 使用 TOGAF 9.1 框架與 ArchiMate 3.0 建模語言
- (23/24) webpack实战技巧:如何在webpack环境中使用Json
- lua--面向对象使用middleclass
- 02.elasticsearch_read_write模型基础
- jenkins 新手入门安装失败_树莓派安装jenkins,安安静静做个持续集成打包机
- 【Linux网络编程学习】socket API(socket、bind、listen、accept、connect)及简单应用
- 第七十七期:可自动生成代码,5款基于AI的开发工具
- 计算机主板另一个名称,主板名称太复杂 看这几点就秒懂了
- Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)
- 为什么说苹果是唯一在乎你隐私的科技公司?
- Loonframework-DAO-Alpha-0.1.0发布
- centos7 安装 卸载docker
- dlna和miracast可以共存吗_同屏镜像功能哪家强?DLNA miracast等技术解读
- 怎么使用SSH从服务器下载文件
- LOL易游网络验证破解总结
- GCC编译器高效利用cache的原理和参数
- 【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)
- AspectJ in Action 第2版 中文版 简明的内容
- 性能测试报告包括哪些内容?模板范文哪里找?看这里
热门文章
- 使用Vue开发项目(一)
- offsetWidthoffsetLeft详解
- 【SystemVerilog基础】$sformatf()/$sformat() 快速上手指南
- 第十三章 ALDS1_12_A:Minimum Spanning Tree 最小生成树
- bower 基本使用
- Teleport 开源堡垒机安装使用
- C/C++ 中的次方运算
- unity2d 换装功能实现
- git --rebase (develop|AM/REBASE)
- smarty模板的使用(1)