Asp.net Vnext Routing
概述
本文已经同步到《Asp.net Vnext 系列教程 》中]
ASP.NET 路由系统是主要负责两个操作:
它将传入的 HTTP 请求映射到路由处理程序给出的路由的集合。
代码实现TemplateRoute 类初始化路由和 URL 模板
public class MyTemplateRoute : TemplateRoute
{
public MyTemplateRoute(IRouteBuilder routeCollectionBuilder)
: base(routeCollectionBuilder.DefaultHandler,
"{controller}/{action}/{id?}",
new RouteValueDictionary(new { controller = "Home", action = "Index" }),
new RouteValueDictionary(new { }),
new RouteValueDictionary(new { }),
routeCollectionBuilder.ServiceProvider.GetService<IInlineConstraintResolver>())
{
} public override Task RouteAsync(RouteContext context)
{
return base.RouteAsync(context);
}
}
启动类
public class Startup
{
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
} public void Configure(IApplicationBuilder app)
{
app.UseMvc(routes => {
//加入模板 默认http://http://localhost/Home/Index
routes.Routes.Add(new MyTemplateRoute(routes)); });
}
}
实现IRouter添加默认路由
public class DefaultRoute : IRouter
{ private readonly IRouter _next; public DefaultRoute(IRouter next)
{
_next = next;
} public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
return _next.GetVirtualPath(context);
} public async Task RouteAsync(RouteContext context)
{ var oldRouteData = context.RouteData;
var newRouteData = new RouteData(oldRouteData);
newRouteData.Routers.Add(_next);
newRouteData.Values["controller"] = "Home";
newRouteData.Values["action"] = "Index";
try
{
context.RouteData = newRouteData;
await _next.RouteAsync(context);
}
finally
{
if (!context.IsHandled)
{
context.RouteData = oldRouteData;
} }
} }
public void Configure(IApplicationBuilder app)
{
app.UseMvc(routes => {
//加入模板 默认http://http://localhost/Home/Index
// routes.Routes.Add(new MyTemplateRoute(routes)); routes.MapRoute("default", "{controller}/{action}");
//加入路由处理 默认http://http://localhost/Home/Index
routes.Routes.Add(new DefaultRoute(routes.DefaultHandler)); });
}
实现IRouteConstraint约束
public class DateConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, IDictionary<string, object> values, RouteDirection routeDirection)
{
return values["controller"] == "Home";
}
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc(routes => {
//加入模板 默认http://http://localhost/Home/Index
// routes.Routes.Add(new MyTemplateRoute(routes)); //routes.MapRoute("default", "{controller}/{action}");
////加入路由处理 默认http://http://localhost/Home/Index
//routes.Routes.Add(new DefaultRoute(routes.DefaultHandler)); //加入约束
routes.MapRoute(name: "TestRoute", template: "{*constraints}", defaults: new { controller = "Home", action = "Index" }, constraints: new { constraint = new DateConstraint() }); });
}
路由特性
public class HomeController : Controller
{ //PUT http://localhost/AB
[AcceptVerbs("PUT", Route = "AB")]
// Patch http://localhost/AB
[HttpPatch("AB")]
//PUT http://localhost/Home/AB
[AcceptVerbs("PUT", Route = "Home/AB")]
//Patch http://localhost/Home/AB
[HttpPatch("Home/Ab")] // ABC 动作 可以被以下地址访问
//PUT http://localhost/AB
// Patch http://localhost/AB
//PUT http://localhost/Home/AB
//Patch http://localhost/Home/AB
public IActionResult ABC()
{ return Content("");
}
} }

RouteConstraintAttribute 路由约束
public class CountrySpecificAttribute : RouteConstraintAttribute
{
public CountrySpecificAttribute(string countryCode)
: base("country", countryCode, blockNonAttributedActions: true)
{
}
}

应用在控制上

添加路由条目
routes.MapRoute(
"products",
"Products/{country}/{action}",
defaults: new { controller = "Products" })yu
运行截图

Area
//区域名
[Area("Admin")]
//路由
[Route("[area]/Users")]
public class UserManagementController : Controller
{ [HttpGet("All")]
public IActionResult ListUsers()
{
return Content("");
}
}
添加路由条目
routes.MapRoute("areaRoute",
"{area:exists}/{controller}/{action}",
new { controller = "Home", action = "Index" });

Asp.net Vnext Routing的更多相关文章
- POCO Controller 你这么厉害,ASP.NET vNext 知道吗?
写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 P ...
- 分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!
写在前面 阅读目录: Visual Studio "14" CTP 关于 ASP.NET vNext ASP.NET vNext 实践 后记 ASP.NET vNext 发布已经过 ...
- 开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)
新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...
- [译]Introducing ASP.NET vNext and MVC 6
原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...
- Asp.net vNext 学习1
Asp.net vNext 学习之路(一) 概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新 ...
- Introducing ASP.NET vNext and MVC 6
[译]Introducing ASP.NET vNext and MVC 6 原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source ...
- [转载]Getting Started with ASP.NET vNext and Visual Studio 14
说在转载之前的话:ASP.NET框架之前不断做大,而vNext则是从头开始,对ASP.NET框架进行拆分并瘦身,面对不同的需求而更加灵活,各个拆分出来的模块更加轻量.vNext的出现,对ASP.NET ...
- Asp.net vNext 学习之路(一)
概述 asp.net vNext 也叫 asp.net 5.0,意思是微软推出的下一个版本的asp.net.可以说是微软对asp.net的一个比较重大的重新设计, asp.net vNext是一 个比 ...
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...
随机推荐
- javascript实例学习之五——瀑布流布局
瀑布流布局的特征: 1,各列的高度参差不齐 2,页面向下滚动时,自动请求和加载新数据 目前,瀑布流布局的主流实现方式有两种: 1,基于浮动,每一列是一个ul,这些ul都向左浮动,这种方法的好处是布局容 ...
- java版本的sqlHelper
以下版本的sqlHelper可以支持普通的DDL,DML和查询语句,对于连接池,事务等的支持还有待改进 1)将数据库连接相关信息存储为属性文件,如database.properties,建立DataB ...
- SSH 25 tips
port ssh -Nf -L 9800:192.168.1.132:22 -l root 10.100.125.76 -v ssh -l root 127.0.0.1 -p 9800 scp -P ...
- Sql清理日志文件
场景: 我们导入MR数据时发现磁盘空间不够用了,导致的结果就是我们的程序很可能会抛出异常了,我们需要导入数据的时候进行日志瘦身. 问1:导入数据的时候,瘦身是否会造成数据库的异常? DBA提供解决方案 ...
- C++Primer 第九章
//1.vector:可变大小数组.支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢.注意点:不要在vector中存放bool类型,vector<bool>并不是一个容器,其实现方 ...
- C++Primer 第五章
//1.表达式语句的作用:执行表达式并丢弃求值结果 ; value + ; //执行,并丢弃结果 //2.复合语句是指用花括号括起来的语句和声明的序列,复合语句称为块.一个块就是一个作用域.块不以分号 ...
- How to use Ubuntu Linux in virtual box
安装git : yum install git 查询包: rpm -ql git 打开文件夹目录: nautilus 目录路径
- fzu 2111 Min Number
http://acm.fzu.edu.cn/problem.php?pid=2111 Problem 2111 Min Number Accept: 572 Submit: 1106Tim ...
- run()和star()区别
run()和star()区别 run()-->只是thread类的一个普通方法调用 star()-->用来启动线程,实现多线程运行
- MVC4 下DropDownList使用方法
与MVC3相比,差别很大: 表现形式一: public ActionResult Main() { List<SelectListItem> items = new List<Sel ...