升級到 OData 8 時,找不到從導航屬性的 URI 獲取密鑰的方法。
我正在使用Asp.Versioning.OData的預覽包,并按照Microsoft 的本指南從 Uri 獲取密鑰。此 guid 有一個方法Helpers.GetKeyFromUri(),但在 OData v8 中,它缺少許多擴展方法,GetUrlHelper()例如KeyValuePathSegment.
將 Asp.Versioinng.OData 與 OData 8 和 .net core 6 一起使用時,是否有一種從 Uri 提取密鑰的新方法?
我還通過示例參考了它的源代碼,但它沒有實作如何從 Uri 獲取密鑰。
uj5u.com熱心網友回復:
@soccer7,您所指的指南適用于帶有 ASP.NET Web API (2.2) 的 OData。這不適用于帶有 ASP.NET Core 的 OData。
OData 檔案似乎沒有更新如何提取密鑰。可能還有其他方法,但以下方法肯定會起作用:
[HttpPut]
public IActionResult CreateRef(
int key,
string navigationProperty,
[FromBody] Uri link )
{
var feature = HttpContext.ODataFeature();
var model = feature.Model;
var serviceRoot = new Uri( new Uri( feature.BaseAddress ), feature.RoutePrefix );
var requestProvider = feature.Services;
var parser = new ODataUriParser( model, serviceRoot, link, requestProvider );
parser.Resolver ??= new UnqualifiedODataUriResolver() { EnableCaseInsensitive = true };
parser.UrlKeyDelimiter = ODataUrlKeyDelimiter.Slash;
var path = parser.ParsePath();
var segment = path.OfType<KeySegment>().Single();
var otherKey = segment.Keys.Single().Value; // note: could have multiple keys
// TODO: use 'otherKey'
return NoContent();
}
這需要一些探索,但這是基于 OData 決議路徑所做的作業(如此處所示)。不清楚為什么,但是對應的介面和實作都被標記了internal。通過一些額外的作業,您可以將其轉換為擴展方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487068.html
標籤:C# 网 asp.net 核心 数据 asp.net-core-6.0
