1

我正在使用 Microsoft.OData.Client 创建客户端 Blazor 应用程序。当我像这样创建新实体时:

            var dataServiceContext = this.ClientFactory.CreateClient<Container>(new Uri("http://localhost:5000/odata"));
            var newAsset = new CreateAssetDto()
            {
                TechnicalName = "from_client_4",
                DisplayNameFormat = "format from client",
                Icon = "client/icon",
                InheritedFrom = Guid.NewGuid(),
                IsActive = true,
                Translation = new AssetTranslationDto
                {
                    Title = "Client Asset",
                    Language = "en",
                    Description = "This is asset from client"
                }
            };

            dataServiceContext.AddToAssets(newAsset);
            await dataServiceContext.SaveChangesAsync();

我收到一个异常,指出对此 POST 请求的响应缺少 Location 标头。当我运行 fiddle 以查看发生了什么时,我可以看到它实际上发出了 2 个请求。在此处输入图像描述

第一个请求是 POST 但不包括正文并收到 204 响应。第二个请求是实际包含创建新资产的数据的请求,并且响应包含应有的 Location 标头。

我猜 OData 客户端抱怨第一个请求的响应中缺少 Location 标头(因为第二个请求的响应确实包含标头)。但为什么它甚至提出第一个请求?

知道如何处理这个问题吗?

4

1 回答 1

0

第一个请求可能是浏览器发送的预检请求。但通常 CORS 预检请求是使用 OPTIONS 方法发送的,而不是 POST。所以这个案例很好奇。

我是该项目的贡献者,但没有足够的声誉在此处添加评论以获得澄清。你能在https://github.com/OData/odata.net上创建一个问题吗?

于 2020-11-12T07:50:48.150 回答