以下は従来の MVC ルーティングです
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, );
以下のような効果を持つルーティングを実現したい場合は、従来の規約ルーティングを使用する方が面倒です。
rreee属性ルーティングを使用すると、より簡単になります。
新しい WEB API プロジェクトを作成する場合は、App_Start ディレクトリの WebApiConfig.cs ファイルを開き、次のコードを追加して属性ルーティング構成を有効にします。
order/Miles/三只松鼠干果/2袋 order/2017/1/13
属性ルーティングは、次のように規約ルーティングと混合することもできます:
config.MapHttpAttributeRoutes();
次のように、属性ルーティングを使用するメソッドに機能マークを付けます:
public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { id=@"\d+"} ); }
テスト結果 (URL はエンコードされています。それ以外の場合は 400 エラーが発生します) )
通常、同じコントローラー内のすべてのルートは同じプレフィックスで始まります
[Route("order/{UserNickName}/{ProductName}/{count}")]
これは明らかにさらに面倒です。そこで、[RoutePrefix] 属性を使用してパブリック プレフィックスを設定します
テスト結果
[RoutePrefix] が使用されている場合、一部の特別な API では、次のようにチルダを使用してルート プレフィックスを書き換えることができます。
テスト結果(同じクラスの下)以下の通り
テスト結果
パラメータがInt型でない場合、ルートは一致しません
以下はサポートされるいくつかの制約です
複数使用できますconstraints ですが、コロンを使用して区切ります
[Route("api/books")] [Route("api/books/{id:int}")] [Route("api/books")]結果 範囲内にない場合は一致しません
[Route("users/{id:int:length(1,3)}")] public User GetUserById(int id) { ... }登録制約
public class NonZeroConstraint : IHttpRouteConstraint { public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary<string, object> values, HttpRouteDirection routeDirection) { object value; if (values.TryGetValue(parameterName, out value) && value != null) { long longValue; if (value is long) { longValue = (long)value; return longValue != 0; } string valueString = Convert.ToString(value, CultureInfo.InvariantCulture); if (Int64.TryParse(valueString, NumberStyles.Integer, CultureInfo.InvariantCulture, out longValue)) { return longValue != 0; } } return false; } }
制約の使用
public static class WebApiConfig { public static void Register(HttpConfiguration config) { var constraintResolver = new DefaultInlineConstraintResolver(); constraintResolver.ConstraintMap.Add("nonzero", typeof(NonZeroConstraint)); config.MapHttpAttributeRoutes(constraintResolver); } }
オプションの URI パラメーターとデフォルト値
ルート パラメーターにマークを付ける疑問符を追加すると、ルート パラメーターをオプションの URI パラメーターにすることができます。ルート パラメータがオプションの場合は、メソッド パラメータのデフォルト値を定義する必要があります。
[Route("{id:nonzero}")] public HttpResponseMessage GetNonZero(int id) { ... }
またはルーティングテンプレートでデフォルト値を定義します
public class BooksController : ApiController { [Route("api/books/locale/{lcid:int?}")] public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) { ... } }
以上がWEB APIのASP.NET属性ルーティング例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。