【移动应用开发技术】ASP.NET中怎么实现Routing路由_第1页
【移动应用开发技术】ASP.NET中怎么实现Routing路由_第2页
【移动应用开发技术】ASP.NET中怎么实现Routing路由_第3页
【移动应用开发技术】ASP.NET中怎么实现Routing路由_第4页
【移动应用开发技术】ASP.NET中怎么实现Routing路由_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论