NET Web API中的路由和操作选择

ASP.NET Web API中的路由和操作选择

本文介绍ASP.NET Web API如何将HTTP请求路由到控制器上的特定操作。

本文将介绍路由过程的详细信息。如果您创建一个Web API项目并发现某些请求没有按照您期望的方式进行路由,那么本文将有所帮助。

路由有三个主要阶段:

1、将URI与路由模板匹配。

2、选择一个控制器。

3、选择一个动作。

可以使用自己的自定义行为替换流程的某些部分。在本文中,我将描述默认行为。最后,我会注意到您可以自定义行为的位置。

 

路由模板

路径模板看起来类似于URI路径,但它可以有占位符值,用花括号表示:

"api/{controller}/public/{category}/{id}"

创建路径时,可以为部分或全部占位符提供默认值:

defaults: new { category = "all" }

您还可以提供约束,这些约束限制URI段与占位符匹配的方式:

constraints: new { id = @"\d+" }   // Only matches if "id" is one or more digits.

框架尝试将URI路径中的段与模板进行匹配。模板中的文字必须完全匹配。占位符匹配任何值,除非您指定约束。该框架与URI的其他部分不匹配,例如主机名或查询参数。框架选择路由表中与URI匹配的第一个路由。

有两个特殊的占位符:“{controller}”和“{action}”。

“{controller}”提供控制器的名称。

“{action}”提供操作的名称。在Web API中,通常的惯例是省略“{action}”。

默认:如果提供默认值,则路由将匹配缺少这些段的URI。例如:

routes.MapHttpRoute(

    name: "DefaultApi",

    routeTemplate: "api/{controller}/{category}",

    defaults: new { category = "all" }

);

URI“ http://localhost/api/products”匹配此路由。“{category}”段被分配了默认值“all”。

路由词典

如果框架找到URI的匹配项,它将创建一个包含每个占位符的值的字典。键是占位符名称,不包括花括号。值来自URI路径或默认值。字典存储在IHttpRouteData对象中。

在此路由匹配阶段,特殊的“{controller}”和“{action}”占位符将被视为与其他占位符一样。它们只是与其他值一起存储在字典中。

默认值可以具有特殊值RouteParameter.Optional。如果为占位符分配了此值,则该值不会添加到路径字典中。例如:

routes.MapHttpRoute(

    name: "DefaultApi",

    routeTemplate: "api/{controller}/{category}/{id}",

    defaults: new { category = "all", id = RouteParameter.Optional }

);

对于URI路径“api / products”,路由字典将包含:

控制器:“产品”

类别:“全部”

但是,对于“api / products / toys / 123”,路线词典将包含:

控制器:“产品”

类别:“玩具”

id:“123”

默认值还可以包含不会出现在路径模板中任何位置的值。如果路由匹配,则该值存储在字典中。例如:

routes.MapHttpRoute(

    name: "Root",

    routeTemplate: "api/root/{id}",

    defaults: new { controller = "customers", id = RouteParameter.Optional }

);

如果URI路径为“api / root / 8”,则字典将包含两个值:

控制器:“客户”

id:“8” 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值