目录
一、常规路由模板设置及EndpointRouting(终结点路由)
1、默认路由模板:app.UseMvcWithDefaultRoute();
2、常规路由模板设置及EndpointRouting(终结点路由)
三、(番外):ASP.NET Core MVC中libman
Startup.cs文件中Configure()方法的代码设置HTTP请求处理管道。
一、常规路由模板设置及EndpointRouting(终结点路由)
1、默认路由模板:app.UseMvcWithDefaultRoute();

默认路由模板规则是这样的:{controller=Home}/{action = Index}/{id?}
其中{id?}中的?表示此参数是可选的(非必填)。


2、常规路由模板设置及EndpointRouting(终结点路由)
推荐使用功能更丰富的UseEndpoints()中间件路由。
//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类中加这个:
[Route("")]
[Route("Home")]
[Route("Home/Index")]
//这三个地址都是可以访问到 Index() 的
public ViewResult Index()
{
return View();
}
● 还有一点要说一下:控制器和操作方法名称不会影响 属性路由名称。也主就是说在controller类中像下面中这样写也是可以的,大不了用http://localhost:12345/abc/def访问。
[Route("abc/def")]
public ActionResult Details(int?id)
{
return View();
}
● 另有一点再说一下:属性路由支持多层,像下面这样
[Route("")]
[Route("Home")]
[Route("Home/Index")]
public ViewResult Index()
{
return View();
}
[Route("Home/Details")]
public ActionResult Details()
{
return View();
}
● 精简写法:把“Home”拉出来:
[Route("Home")]
public class HomeController : Controller
{
[Route("/")] //这个很重要,它让http://localhost:12345可以访问
[Route("")] //让让http://localhost:12345/home可以访问
[Route("Index")] //让http://localhost:12345/home/index可以访问
public ViewResult Index()
{
return View();
}
[Route("Details")] //让http://localhost:12345/home/details可以访问
public ActionResult Details()
{
return View();
}
}
● 再进一步:通过将标记放在方括号中来支持标记替换。标记[controller]和[action]将替换为定义路径的控制器名称和操作名称的值
[Route("[controller]")] //标记替换为:控制器名称
public class HomeController : Controller
{
[Route("/")]
[Route("")]
[Route("Index")]
public ViewResult Index()
{
return View();
}
[Route("[action]")] //标记替换为:操作名称
public ActionResult Details()
{
return View();
}
}
一个小插曲:
因为一个写在控制类外面的属性路由没有删掉,从昨天到今天所有的路由规则一直无法生效,都快被搞死了。TMD,截图留念。但得到的知识是:属性路由的优先级高。
三、(番外):ASP.NET Core MVC中libman
libman.json是库管理器清单文件,简化的内容如下
{
"version": "1.0", //当前的libman文件版本
"defaultProvider": "cdnjs", //默认从哪个CDN网络下载文件
"libraries": [
{
"library": "twitter-bootstrap@5.1.3", //要下载的前端包名称
"destination": "wwwroot/lib/twitter-bootstrap/" //存放库的文件路径地址
}
]
}
本文介绍了ASP.NET Core MVC中的路由机制,包括默认的路由模板`app.UseMvcWithDefaultRoute();`,常规路由模板设置与EndpointRouting,以及属性路由的使用方法。强调了属性路由的高优先级,并提到了`libman`在ASP.NET Core MVC中的作用。
137

被折叠的 条评论
为什么被折叠?



