当前位置:网站首页>浅浅理解.net core的路由
浅浅理解.net core的路由
2022-07-07 15:32:00 【旧时量刑】
路由:
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);
//获取文件的ContentType
var 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();
}
}
}
边栏推荐
- 低代码(lowcode)帮助运输公司增强供应链管理的4种方式
- Personal notes of graphics (2)
- 数据中台落地实施之法
- Deep listening array deep listening watch
- 掌握这套精编Android高级面试题解析,oppoAndroid面试题
- 【C 语言】 题集 of Ⅹ
- Personal notes of graphics (1)
- 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
- Master this set of refined Android advanced interview questions analysis, oppoandroid interview questions
- 网关Gateway的介绍与使用
猜你喜欢
平衡二叉树(AVL)
Pisa-Proxy SQL 解析之 Lex & Yacc
最新Android面试合集,android视频提取音频
Sort out several important Android knowledge and advanced Android development interview questions
如何快速检查钢网开口面积比是否符合 IPC7525
The latest interview experience of Android manufacturers in 2022, Android view+handler+binder
Opencv configuration 2019vs
DNS 系列(一):为什么更新了 DNS 记录不生效?
Pycharm terminal enables virtual environment
掌握这套精编Android高级面试题解析,oppoAndroid面试题
随机推荐
【C 语言】 题集 of Ⅹ
How can laravel get the public path
面向接口编程
删除 console 语句引发的惨案
掌握这个提升路径,面试资料分享
谎牛计数(春季每日一题 53)
[designmode] template method pattern
最新Android面试合集,android视频提取音频
谈谈 SAP 系统的权限管控和事务记录功能的实现
Localstorage and sessionstorage
01tire+ chain forward star +dfs+ greedy exercise one
PHP has its own filtering and escape functions
typescript ts 基础知识之类型声明
二叉搜索树(基操篇)
Balanced binary tree (AVL)
Opportunity interview experience summary
Read PG in data warehouse in one article_ stat
The team of East China Normal University proposed the systematic molecular implementation of convolutional neural network with DNA regulation circuit
C语言进阶——函数指针
射线与OBB相交检测