当前位置:网站首页>浅浅理解.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();
}
}
}
边栏推荐
- 两类更新丢失及解决办法
- null == undefined
- Horizontal and vertical centering method and compatibility
- 【MySql进阶】索引详解(一):索引数据页结构
- logback. XML configure logs of different levels and set color output
- "The" "PIP" "entry cannot be recognized as the name of a cmdlet, function, script file, or runnable program."
- HAVE FUN | “飞船计划”活动最新进展
- 射线与OBB相交检测
- 最新高频Android面试题目分享,带你一起探究Android事件分发机制
- DAPP defi NFT LP single and dual currency liquidity mining system development details and source code
猜你喜欢
随机推荐
JS中null NaN undefined这三个值有什么区别
直接上干货,100%好评
预售17.9万,恒驰5能不能火?产品力在线,就看怎么卖
Laravel5.1 Routing - routing packets
time标准库
Personal notes of graphics (4)
What is the difference between IP address and physical address
第九届 蓝桥杯 决赛 交换次数
[C language] question set of X
Find tags in prefab in unity editing mode
《产品经理必读:五种经典的创新思维模型》的读后感
3000 words speak through HTTP cache
Master this promotion path and share interview materials
LeetCode 403. 青蛙过河 每日一题
dapp丨defi丨nft丨lp单双币流动性挖矿系统开发详细说明及源码
谎牛计数(春季每日一题 53)
Build an all in one application development platform, light flow, and establish a code free industry benchmark
[Android -- data storage] use SQLite to store data
二叉搜索树(特性篇)
Introduction to ThinkPHP URL routing