




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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年购房按揭贷款代理协议示范文本
- DC与微生物互作-洞察及研究
- 增强现实医疗辅助-第1篇-洞察及研究
- 慢病智能分诊系统-洞察及研究
- 响应式材料开发-洞察及研究
- 2025大连市房地产代理合同范文
- 2025-2030年中国摩托车异型排气体管行业深度研究分析报告
- 医院各职能科室岗位职责
- 《树立正确的“三观”》班会课件
- 园林绿化移树合同
- 医疗机构保洁人员培训
- 企业员工健康促进计划的设计与实施
- 助理工程师答辩演示
- 成人失禁相关性皮炎的预防与护理-护理团标
- 装载机的基础知识-装载机的结构及仪表
- 现代低压电器技术 课件 2. 常见低压电器
- 浙江天垣新型墙体材料有限公司年产40万立方米ALC板材项目环境影响报告
- 放射事件应急处理预案牙科
- GSV2.0反恐安全管理手册
评论
0/150
提交评论