6

このような URL でクエリ文字列が渡されたかどうかを汎用ルートで判断したい

http://localhost/query/DailyLogs/1?dateOfLog='1/13/2013'

これが私の現在のルート定義です。

routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "query/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional}
        );

Route定義のオプションのアクションとしてdateOfLog値を追加するといういくつかの回答を読みました:

routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "query/{controller}/{id}/{dateOfLog}",
            defaults: new { id = RouteParameter.Optional, 
            dateOfLog = RouteParameter.Optional }
        );

これはうまくいかないようです。何か間違ったことをしているのかもしれません。よくわかりません。


これは私が現在問題を処理している方法ですが、Routing Engine の ModelBinding 機能を使用したいと思います。

 var queryValue = Request.RequestUri.ParseQueryString();
 string dateOfLog = queryValue["dateOfLog"];

ModelBinding を正しく使用する Route 定義を作成し、カスタム URL をコントローラーのパラメーターにマップする方法を教えてください。

4

1 に答える 1

6

コントローラー アクションではDateTime dateOfLog、メソッド パラメーターとして含めるだけで、クエリ文字列を引き続き使用できます。問題なくマップされるため、Web API は正しいメソッド オーバーロードを見つけた場合にそれを使用します。

于 2013-03-29T20:57:11.987 に答える