現在、BreezeJs のドキュメント / 例に示されているように、すべてのデータ クエリを呼び出しています。
getEntityList = function (predicate) {
var query = new entityModel.EntityQuery().from("EntityList");
if (predicate)
query = query.where(predicate);
return manager.executeQuery(query);
}
しかし、クエリ可能な結果が返される前に、コントローラーアクションに追加のパラメーターを渡したい:
[AcceptVerbs("GET")]
public IQueryable<Entity> EntityList(string actionParam) {
//here goes logic that depends on actionParam
//and returns IQueryable<Entity>
}
ドキュメントからわかるように:
Breeze はクエリを次のような OData クエリ文字列に変換します。
?$filter=IsArchived%20eq%20false&$orderby=CreatedAt
ここから問題が始まります。パラメータをコントローラアクションに渡すクエリを作成するにはどうすればよいですか?
getEntityList = function (predicate, actionParam) {
var query = new entityModel.EntityQuery().from("EntityList");
if (predicate)
query = query.where(predicate);
if(actionParam)
// ???
return manager.executeQuery(query);
}
私はすでにルートを次のように設定しようとしました:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{actionParam}",
defaults: new { query = RouteParameter.Optional }
);
fromセクションに適用してactionParamを送信し、
var query = new entityModel.EntityQuery()
.from("EntityList/" + encodeURIComponent(actionParam));
しかし、いくつかの特別な文字でエンコーディングが失敗し、不正なリクエストがスローされています。
このようなシナリオでactionParamを適切に送信するにはどうすればよいですか? 助けてください。