クエリの結果を取得するために ODataController を使用しています。コントローラーは次のように定義されます。
public class RunController : ODataController
{
[EnableQuery(MaxNodeCount = 1000)]
public IHttpActionResult Get() {
...
}
}
コントローラーに直接行くと動作します。私のルートは、次の URL に移動するように設定されています。
http://localhost:58704/odata/Run
ルート構成は次のようになります。
config.MapODataServiceRoute(
routeName: "defaultOdata",
routePrefix: "odata",
model: GetModel(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
GetModel() は次のようになります。
public static Microsoft.OData.Edm.IEdmModel GetModel()
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<RunController.RunModel>("Run");
return builder.GetEdmModel();
}
ご覧のとおり、defaultOdataBatchHandler を有効にしました。の
http://localhost:58704/odata/$batch
問題なく動作します。次のステップは、バッチ ステートメントを作成することです。これは、datajs によって行われ、次のようになります。
return OData.request({
requestUri: "http://localhost:58704/odata/$batch",
method: "POST",
data: {
__batchRequests: [
{requestUri: "Run", method: "GET" }
]
}
}, function (data, response) {
console.log(data.__batchResponses);
}, undefined, OData.batchHandler);
バッチ クエリは必要なものを取得し、HTTP 200 を返します。これはすばらしいことです。に変換される内部のクエリhttp://localhost:58704/odata/Run
は、HTTP 404 を返します。そして、私の人生では理由を理解できません。
という行は、次console.log(data.__batchResponses)
のようなメッセージ プロパティを持つ 1 つのオブジェクトを返します。「HTTP 要求が失敗しました」、および応答の本文には次のように記載されています。
"{"message":"No HTTP resource was found that matches the request URI 'http://localhost:58704/odata/Run'.","messageDetail":"No type was found that matches the controller named 'odata'."}"
エラーメッセージに表示されているURLを使用すると、問題なく動作します。method: "GET"
バッチ リクエストの が正しく機能していない可能性がありますか?