gpt4 book ai didi

javascript - OData Uri 批量返回 404,而如果我转到提供的 url,它就可以工作。为什么?

转载 作者:行者123 更新时间:2023-11-29 21:55:05 24 4
gpt4 key购买 nike

我正在使用 ODataController 来获取我的查询结果。 Controller 定义如下:

public class RunController : ODataController
{
[EnableQuery(MaxNodeCount = 1000)]
public IHttpActionResult Get() {
...
}
}

如果我直接转到 Controller ,它就可以工作。我的路线已设置,因此我会转到此 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"没有正常使用?

最佳答案

根据您在 ASP.NET Web API OData 应用程序中使用的类和方法,我认为您使用的是 OData V4。但是您的客户端(dataJS)不支持 OData V4。您可以使用支持 OData V4 的 apache odatajs,代码如下:

window.odatajs.oData.request({
requestUri: "/odata/$batch",
method: "POST",
data: {
__batchRequests: [
{ requestUri: "Products", method: "GET" }
]
}
}, function (data, response) {
console.log(data.__batchResponses[0].data.value);
}, undefined, window.odatajs.oData.batch.batchHandler);

不会有任何问题,两个库的API是一样的。

可以在此处下载包含服务器端(ASP.NET Web API OData V4)和客户端(apache odatajs)的完整示例

https://github.com/ymoradi/samples/tree/master/NetFX/ASP.NET/ASP.NET%20Web%20API/OData/apache%20odatajs%20v4%20sample%20code

这些是两个请求之间的差异:

odatajs request headers(successful one):
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json;q=0.9, */*;q=0.1

datajs request headers(failed one):
MaxDataServiceVersion: 3.0
DataServiceVersion: 1.0
Accept: application/atomsvc+xml;q=0.8, application/json;odata=fullmetadata;q=0.7, application/json;q=0.5, */*;q=0.1

关于javascript - OData Uri 批量返回 404,而如果我转到提供的 url,它就可以工作。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26859984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com