国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET Core開發日志之OData(Open Data Protocol)

2024-07-10 12:49:39
字體:
來源:轉載
供稿:網友

簡述

OData,即Open Data Protocol,是由微軟在2007年推出的一款開放協議,旨在通過簡單、標準的方式創建和使用查詢式及交互式RESTful API。

類庫

在.NET Core中想要使用OData功能的話需要添加Microsoft.AspNetCore.OData包。

dotnet add package Microsoft.AspNetCore.OData

準備模型類

public class Address{ public string City { get; set; } public string Street { get; set; }}public enum Category{ Book, Magazine, EBook}public class Press{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public Category Category { get; set; }}public class Book{ public int Id { get; set; } public string ISBN { get; set; } public string Title { get; set; } public string Author { get; set; } public decimal Price { get; set; } public Address Address { get; set; } public Press Press { get; set; }}

創建Edm模型

OData使用EDM,即Entity Data Model來描述數據的結構。在Startup文件中添加創建方法。

private static IEdmModel GetEdmModel(){  var builder = new ODataConventionModelBuilder();  builder.EntitySet<Book>("Books");  builder.EntitySet<Press>("Presses");  return builder.GetEdmModel();}

注冊OData服務

在Startup文件的ConfigureServices方法里注冊OData服務。

services.AddOData();services.AddMvc(options =>  {    options.EnableEndpointRouting = false;  }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

這里要注意的是在.NET Core 2.2里,默認已經有終結點,所以要使用OData的終結點的話需要將默認選項禁用掉。

注冊OData終結點

同樣在Startup文件里,在其Configure方法內將原來的注冊路由內容改為注冊OData的終結點。

app.UseMvc(b =>{  b.MapODataServiceRoute("odata", "odata", GetEdmModel());});

顯示元數據

運行程序后訪問https://localhost:5001/odata/$metadata地址,可以看到所有可用模型的元數據。

<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">  <edmx:DataServices>    <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Default">      <EntityType Name="Book">        <Key>          <PropertyRef Name="Id"/>        </Key>        <Property Name="Id" Type="Edm.Int32" Nullable="false"/>        <Property Name="ISBN" Type="Edm.String"/>        <Property Name="Title" Type="Edm.String"/>        <Property Name="Author" Type="Edm.String"/>        <Property Name="Price" Type="Edm.Decimal" Nullable="false"/>        <Property Name="Address" Type="Default.Address"/>        <NavigationProperty Name="Press" Type="Default.Press"/>      </EntityType>      <EntityType Name="Press">        <Key>          <PropertyRef Name="Id"/>        </Key>        <Property Name="Id" Type="Edm.Int32" Nullable="false"/>        <Property Name="Name" Type="Edm.String"/>        <Property Name="Email" Type="Edm.String"/>        <Property Name="Category" Type="Default.Category" Nullable="false"/>      </EntityType>      <ComplexType Name="Address">        <Property Name="City" Type="Edm.String"/>        <Property Name="Street" Type="Edm.String"/>      </ComplexType>      <EnumType Name="Category">        <Member Name="Book" Value="0"/>        <Member Name="Magazine" Value="1"/>        <Member Name="EBook" Value="2"/>      </EnumType>      <EntityContainer Name="Container">        <EntitySet Name="Books" EntityType="Default.Book">          <NavigationPropertyBinding Path="Press" Target="Presses"/>        </EntitySet>        <EntitySet Name="Presses" EntityType="Default.Press"/>      </EntityContainer>    </Schema>  </edmx:DataServices></edmx:Edmx>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固阳县| 岫岩| 永修县| 许昌县| 开化县| 久治县| 昌邑市| 鄯善县| 萍乡市| 锦屏县| 濮阳市| 黄浦区| 兰州市| 平陆县| 阿图什市| 武汉市| 万山特区| 太湖县| 丰镇市| 湛江市| 甘南县| 合阳县| 云霄县| 友谊县| 凤翔县| 临湘市| 濉溪县| 云霄县| 怀宁县| 乌鲁木齐市| 禹城市| 准格尔旗| 买车| 蓝田县| 星子县| 三台县| 高密市| 阳高县| 彩票| 阿勒泰市| 乳山市|