




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】ASP.NET中怎么实现Routing路由
Routing框架的主要流程Route参数和约束条件的改进routes.MapRoute(
"Product",
"Product/{productId}",
defaults:
new
{
controller
=
"Product",
action
=
"Details"
},
constraints:
new
{
productId
=
@"\d+"
});routes.MapRoute(
"Product",
"Product/{productId}",
defaults:
new
{
controller
=
"Product",
action
=
"Details"
},
constraints:
new
{
productId
=
@"\d+"
});{parameter:constraint}目前支持的约束如下:/upload/information/20210522/379/535397.pngroutes.MapRoute(
"Product",
"Product/{productId:long?}",
new
{
controller
=
"Product",
action
=
"Details"
});routes.MapRoute(
"Product",
"Product/{productId:long?}",
new
{
controller
=
"Product",
action
=
"Details"
});routes.MapRoute(
"Product",
"Product/{productId:long=1000}",
new
{
controller
=
"Product",
action
=
"Details"
});routes.MapRoute(
"Product",
"Product/{productId:long=1000}",
new
{
controller
=
"Product",
action
=
"Details"
});通用Routingpublic
void
Configure(IApplicationBuilder
app)
{
RouteCollection
routes
=
new
RouteCollection();
routes.Add(new
TemplateRoute(new
DebuggerRouteHandler("RouteHandlerA"),
"",
null));
routes.Add(new
TemplateRoute(new
DebuggerRouteHandler("RouteHandlerB"),
"test/{a}/{b:int}",
null));
routes.Add(new
TemplateRoute(new
DebuggerRouteHandler("RouteHandlerC"),
"test2",
null));
app.UseRouter(routes);
//
开启Routing功能
}public
void
Configure(IApplicationBuilder
app)
{
RouteCollection
routes
=
new
RouteCollection();
routes.Add(new
TemplateRoute(new
DebuggerRouteHandler("RouteHandlerA"),
"",
null));
routes.Add(new
TemplateRoute(new
DebuggerRouteHandler("RouteHandlerB"),
"test/{a}/{b:int}",
null));
routes.Add(new
TemplateRoute(new
DebuggerRouteHandler("RouteHandlerC"),
"test2",
null));
app.UseRouter(routes);
//
开启Routing功能
}public
class
DebuggerRouteHandler
:
IRouter
{
private
string
_name;
public
DebuggerRouteHandler(string
name)
{
_name
=
name;
}
public
string
GetVirtualPath(VirtualPathContext
context)
{
throw
new
NotImplementedException();
}
public
async
Task
RouteAsync(RouteContext
context)
{
var
routeValues
=
string.Join("",
context.RouteData.Values);
var
message
=
String.Format("{0}
Values={1}
",
_name,
routeValues);
await
context.HttpContext.Response.WriteAsync(message);
context.IsHandled
=
true;
}
}正常:`http://localhost:5000/`
正常:`http://localhost:5000/test/yyy/12`
404
:`http://localhost:5000/test/yyy/s`
正常:`http://localhost:5000/test2`
404
:`http://localhost:5000/test3`正常:`http://localhost:5000/`
正常:`http://localhost:5000/test/yyy/12`
404
:`http://localhost:5000/test/yyy/s`
正常:`http://localhost:5000/test2`
404
:`http://localhost:5000/test3`MVC中的Routingpublic
void
ConfigureServices(IServiceCollection
services)
{
services.AddMvc();
}
public
void
Configure(IApplicationBuilder
app)
{
app.UseMvc(routeBuilder
=>
{
routeBuilder.MapRoute(
name:
"default",
template:
"{controller}/{action}/{id?}",
defaults:
new
{
controller
=
"Home",
action
=
"Index"
});
});
}public
void
ConfigureServices(IServiceCollection
services)
{
services.AddMvc();
}
public
void
Configure(IApplicationBuilder
app)
{
app.UseMvc(routeBuilder
=>
{
routeBuilder.MapRoute(
name:
"default",
template:
"{controller}/{action}/{id?}",
defaults:
new
{
controller
=
"Home",
action
=
"Index"
});
});
}public
class
ProductsController
:
Controller
{
public
IActionResult
Index()
{
return
Content("It
Works
with
Controller
Base
Class!");
}
}
public
class
DemoController
{
public
IActionResult
Index()
{
return
new
ObjectResult("It
Works
without
Controller
Base
Class!");
}
}
public
class
APIController
{
public
object
Index()
{
return
new
{
Code
=
100000,
Data
=
"OK"
};
}
}public
class
ActionFilterTest
:
IActionFilter
{
public
void
OnActionExecuting(ActionExecutingContext
context)
{
var
typeName
=
context.Controller.GetType().FullName;
Console.WriteLine(typeName
+
"."
+
context.ActionDescriptor.Name
+
":Start");
}
public
void
OnActionExecuted(ActionExecutedContext
context)
{
var
typeName
=
context.Controller.GetType().FullName;
Console.WriteLine(typeName
+
"."
+
context.ActionDescriptor.Name
+
":END");
}
}services.Configure(options
=>
{
options.Filters.Add(typeof(ActionFilterTest));
});RouterTest.ProductsController.Index:Start
RouterTest.ProductsController.Index:End
RouterTest.DemoController.Index:Start
RouterTest.DemoController.Index:End
RouterTest.APIController.Index:Start
RouterTest.APIController.Index:End自定义Routepublic
class
PromoTemplateRoute
:
TemplateRoute
{
public
PromoTemplateRoute(IRouter
target,
string
routeTemplate,
IInlineConstraintResolver
inlineConstraintResolver)
:
base(target,
routeTemplate,
inlineConstraintResolver:
inlineConstraintResolver)
{
}
public
PromoTemplateRoute(IRouter
target,
string
routeTemplate,
IDictionarypublic
class
PromoTemplateRoute
:
TemplateRoute
{
public
PromoTemplateRoute(IRouter
target,
string
routeTemplate,
IInlineConstraintResolver
inlineConstraintResolver)
:
base(target,
routeTemplate,
inlineConstraintResolver:
inlineConstraintResolver)
{
}
public
PromoTemplateRoute(IRouter
target,
string
routeTemplate,
IDictionarypublic
static
class
RouteBuilderExtensions
{
public
static
IRouteBuilder
MapPromoRoute(this
IRouteBuilder
routeCollectionBuilder,
string
name,
string
template)
{
MapPromoRoute(routeCollectionBuilder,
name,
template,
defaults:
null);
return
routeCollectionBuilder;
}
public
static
IRouteBuilder
MapPromoRoute(this
IRouteBuilder
routeCollectionBuilder,
string
name,
string
template,
object
defaults)
{
return
MapPromoRoute(routeCollectionBuilder,
name,
template,
defaults,
constraints:
null,
dataTokens:
null);
}
public
static
IRouteBuilder
MapPromoRoute(this
IRouteBuilder
routeCollectionBuilder,
string
name,
string
template,
object
defaults,
object
constraints,
object
dataTokens)
{
var
inlineConstraintResolver
=
routeCollectionBuilder.ServiceProvider.GetService();
routeCollectionBuilder.Routes.Add(
new
PromoTemplateRoute(
routeCollectionBuilder.DefaultHandler,
name,
template,
ObjectToDictionary(defaults),
ObjectToDictionary(constraints),
ObjectToDictionary(dataTokens),
inlineConstraintResolver));
return
routeCollectionBuilder;
}
private
static
IDictionaryroutes.MapPromoRoute(
name:
"default2",
template:
"promo/{controller}/{action}/{id?}",
defaults:
new
{
controller
=
"Home",
action
=
"Index"
});基于Attribute的Routing[Route("bookhome")]
public
class
HomeController
:
Controller
{
public
IActionResult
Index()
{
return
View();
}
[Route("about")]
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
[Route("contactus")]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}[Route("bookhome")]
public
class
HomeController
:
Controller
{
public
IActionResult
Index()
{
return
View();
}
[Route("about")]
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
[Route("contactus")]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}/bookhome
/bookhome/about
/bookhome/contactus[Route("products/{productId:int}")][Route("products/{productId:int}")][Route("book/[controller]/[action]")][HttpGet("products/{productId:int}")][HttpGet("products/{productId:int}")][Route("book")]
public
class
HomeController
:
Controller
{
public
IActionResult
Index()
{
return
View();
}
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
public
IActionResult
Index()
{
return
View();
}
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
public
IActionResult
Index()
{
return
View();
}
[Route("about")]
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
public
IActionResult
Index()
{
return
View();
}
[Route("about")]
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
[Route("index")]
public
IActionResult
Index()
{
return
View();
}
[Route("about")]
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
[Route("index")]
public
IActionResult
Index()
{
return
View();
}
[Route("about")]
public
IActionResult
About()
{
ViewBag.Message
=
"Your
application
description
page.";
return
View();
}
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
[Route("Contact")]
[HttpGet("home/Contact2")]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}[Route("book")]
public
class
HomeController
:
Controller
{
[Route("Contact")]
[HttpGet("home/Contact2")]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}[Route("Contact")]
[HttpPost("home/Contact2")][Route("Contact")]
[HttpPost("home/Contact2")][HttpGet("Contact")]
[HttpPost("home/Contact2")][Route("book")]
[Route("tom")]
public
class
HomeController
:
Controller
{
[Route("Contact")]
[Route("ContactUS")]
[HttpPost("home/Contact2")]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}[Route("book")]
[Route("tom")]
public
class
HomeController
:
Controller
{
[Route("Contact")]
[Route("ContactUS")]
[HttpPost("home/Contact2")]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}GET:/book/contact
GET:/book/contactus
GET:/tom/contact
GET:/tom/contactus
POST:/book/home/contact2
POST:/tom/home/contact2[Route("book",
Order
=
1)]
[Route("tom",
Order
=
0)]
public
class
HomeController
:
Controller
{
[Route("Contact",
Order
=
1)]
[Route("ContactUS",
Order
=
0)]
[HttpPost("home/Contact2",
Order
=
2)]
public
IActionResult
Contact()
{
ViewBag.Message
=
"Your
contact
page.";
return
View();
}
}自定义内联参数约束[Route("index/{productId:aabbcc}")]public
class
AABBCCRouteConstraint
:
IRouteConstraint
{
public
bool
Match(HttpContext
httpContext,
IRouter
route,
string
routeKey,
IDictionaryservices.Configure(opt
=>
{
opt.ConstraintMap.Add("aabbcc",
typeof(AABBCCRouteConstraint));
});services.Configure(opt
=>
{
opt.ConstraintMap.Add("aabbcc",
typeof(AABBCCRouteConstraint));
});public
class
ABCDRouteConstraint
:
IRouteConstraint
{
public
int
A
{
get;
private
set;
}
public
int
B
{
get;
private
set;
}
public
int
C
{
ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大客户销售岗位面试问题及答案
- 福建省泉港市泉港一中2025年高一化学第二学期期末质量检测模拟试题含解析
- 2025届河北省石家庄市藁城第五中学高二下化学期末经典试题含解析
- 吉林省白城市通榆县一中2025年高二化学第二学期期末检测试题含解析
- 2025届北京专家化学高二下期末学业水平测试模拟试题含解析
- 四川省雅安市2025届化学高一下期末联考模拟试题含解析
- 医用设备销售管理办法
- 华为营运资金管理办法
- 办公区域门禁管理办法
- 村级电站确权管理办法
- 七八年级的英语单词
- 舞台使用合同范例
- 2024年面向社会公开招聘警务辅助人员报名信息表
- 《地区智能电网调度技术支持系统应用功能规范》
- 2024中国类风湿关节炎诊疗指南
- 11294营销管理-国家开放大学2023年1月至7月期末考试真题及答案(共2套)
- 12-重点几何模型-手拉手模型-专题训练
- 2024年河北省张家口市“三支一扶”招聘130人(高频重点复习提升训练)共500题附带答案详解
- 2023年遂宁市船山区选调教师考试真题
- CJJT259-2016 城镇燃气自动化系统技术规范
- 合伙人散伙分家协议书范文
评论
0/150
提交评论