我正在使用 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"
批处理中的请求无法正常工作吗?