转发Http请求,可以定义一个规则,这些规则就是用来匹配请求到底让谁来帮助处理
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
//endpoints.MapControllerRoute(
// name: "default",
// pattern: "{controller=Home}/{action=Index}/{id?}");
//路由匹配从端口号后面开始匹配;
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}", //id? 可以为空
defaults: new
{
controller = "Sixth",
action = "Index"
});
//固定路由:严格匹配字符串hello
endpoints.MapControllerRoute(
name: "hello",
pattern: "hello/hello",
defaults: new
{
controller = "Sixth",
action = "Index"
});
//固定路由
endpoints.MapControllerRoute(
name: "About",
pattern: "About/{action}",
defaults: new
{
controller = "Sixth",
action = "About"
});
//https://localhost:5001/sixth/Index?year=2021&month=9&day=14
//https://localhost:5001/sixth/Index/2021_09_14
//正则路由
endpoints.MapControllerRoute(
name: "regex",
pattern: "{controller}/{action}/{year}_{month}_{day}",
defaults: new { controller = "Sixth", action = "Index" },
constraints: new { year = "^\\d{4}$", month = "^\\d{2}$", day = "^\\d{2}$" });
//https://localhost:5001/sixth/IndexEx/2021-07
///约束:year在2019,2021之间
/// month在6,12之间
endpoints.MapControllerRoute(
name: "range",
pattern: "{controller=Sixth}/{action=IndexEx}/{year:range(2019,2021)}-{month:range(6,12)}");
});
}
以上都是要通过匹配以后,要匹配到MVC中去;
MapGet/MapPost等:请求来了,他匹配到以后,可以把自己定义的处理请求的逻辑给直接放进来,而不用进入到MVC中去。
可以定义个规则:把具体需要处理的逻辑自己封装–不走MVC
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
//MapGet:请求来了,他匹配到以后,可以把自己定义的处理请求的逻辑给直接放进来,而不用进入到MVC中去。。。
//1.可以定义个规则:把具体需要处理的逻辑自己封装--不走MVC
//2.下载固定的模板文件,就没有必要去MVC中去处理,可以自己读取文件直接响应给请求方
endpoints.MapGet("/Richard", async context =>
{
//在这里可以自己定义如何处理本次请求;
await context.Response.WriteAsync($"This is Richard");
});
});
}
特性路由
//特性路由:优先匹配;
//作用
//1.调整访问的路径--隐藏真实的路径
//2.可以约束参数变量
[Route("/Item/{id:int}.html")]
public IActionResult PageInfo(int id)
{
string des = $"controller={this.HttpContext.Request.RouteValues["controller"]}&action={this.HttpContext.Request.RouteValues["action"]}&Id={this.HttpContext.Request.RouteValues["id"]}";
base.ViewBag.Des = des;
return View();
}
[Route("/Item/{Name:minLength(5)}.html")]
public IActionResult UserInfo(string Name)
{
string des = $"controller={this.HttpContext.Request.RouteValues["controller"]}&action={this.HttpContext.Request.RouteValues["action"]}&Id={this.HttpContext.Request.RouteValues["id"]}";
base.ViewBag.Des = des;
return View();
}
//严格匹配端口号:
//如果项目启动监听的端口是8002,就可以匹配,如果不是这个方法就访问不到
[Host("*:8002")]
public IActionResult HostInfo(int id)
{
string des = $"controller={this.HttpContext.Request.RouteValues["controller"]}&action={this.HttpContext.Request.RouteValues["action"]}&Id={this.HttpContext.Request.RouteValues["id"]}";
base.ViewBag.Des = des;
return View();
}
路由规则基础
路由约束