問題

怎么樣限制路由中參數(shù)的值。

 

解決方案

ASP.NET WEB API 允許我們通過 IHttpRouteConstraint 接口設(shè)置路由約束。集中式路由和直接式路由都可以使用 IHttpRouteConstraint。

 

框架提供了 18 個接口,他提供了大部分類型的約束,例如,路由參數(shù)長度相關(guān)的約束,可以確保值都在定義范圍內(nèi),或者限制數(shù)據(jù)類型。當然也可以通過實現(xiàn)接口 IHttpRouteConstraint 來自定義約束邏輯。

 

工作原理

IHttpRoutConstraint 是一個 HTTP 路由約束接口(如代碼片段 3-11),并公開了一個簡單的方法 Match,這個方法需要五個參數(shù),HttpRequestMessage 實例,IHttpRoute 實例,string 類型的 parameterName,Idictionary<string,object> 類型的路由 value,HttpRouteDirection 類型的 routeDirection,也是為了保證路由可以基于應(yīng)用程序的邏輯被匹配到。

 

代碼片段 3-11 IHttpRouteConstraint 定義

public interface IHttpRouteConstraint
{    bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName,
        IDictionary<string, object> values, HttpRouteDirection routeDirection);
}

 

也可以通過使用 CompoundRouteConstraint 進行復合約束,需要通過構(gòu)造函數(shù)添加到 IHttpRouteConstraint 集合中,如表格 3-1 所示,展示內(nèi)建的約束和基本用法

 

表格 3-1. ASP.NET WEB API 中 IHttpRouteConstraint 可以用的約束

 平面設(shè)計培訓,網(wǎng)頁設(shè)計培訓,美工培訓,游戲開發(fā),動畫培訓

 

屬性路由,是通過 DefaultInlineConstraintResolver 來映射嵌入約束的版本和實際類型。當調(diào)用 MapHttpAtrributeRoute 的時候,ASP.NET WEB API 會使用解析器轉(zhuǎn)換嵌入約束為相關(guān) IHttpRouteConstraint 實例。為了采用某些約束處理自定義約束,也可以修改 DefaultInlineConstraintResolver 或者自己實現(xiàn)