-
Notifications
You must be signed in to change notification settings - Fork 475
/
Copy pathStartup.cs
95 lines (79 loc) · 3.59 KB
/
Startup.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
using AspNetCore3xEndpointSample.Web.Models;
using Microsoft.AspNet.OData.Batch;
using Microsoft.AspNet.OData.Extensions;
using Microsoft.AspNet.OData.Formatter.Deserialization;
using Microsoft.AspNet.OData.Routing.Conventions;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OData;
using Microsoft.OData.Edm;
using System;
using System.Collections.Generic;
namespace AspNetCore3xEndpointSample.Web
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//services.AddDbContext<CustomerOrderContext>(opt => opt.UseLazyLoadingProxies().UseInMemoryDatabase("CustomerOrderList"));
//services.AddScoped<CustomerOrderContext>(_ => new CustomerOrderContext(Configuration.GetConnectionString("DefaultConnection")));
services.AddOData();
services.AddRouting();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
IEdmModel model = EdmModelBuilder.GetEdmModel();
// Please add "UseODataBatching()" before "UseRouting()" to support OData $batch.
app.UseODataBatching();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.Expand();
endpoints.MapODataRoute(
"nullPrefix", null,
b =>
{
b.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => model);
b.AddService<ODataDeserializerProvider>(Microsoft.OData.ServiceLifetime.Singleton, sp => new EntityReferenceODataDeserializerProvider(sp));
b.AddService<IEnumerable<IODataRoutingConvention>>(Microsoft.OData.ServiceLifetime.Singleton,
sp => ODataRoutingConventions.CreateDefaultWithAttributeRouting("nullPrefix", endpoints.ServiceProvider));
});
endpoints.MapODataRoute("odataPrefix", "odata", model);
endpoints.MapODataRoute("myPrefix", "my/{data}", model);
endpoints.MapODataRoute("msPrefix", "ms", model, new DefaultODataBatchHandler());
});
}
}
public class EntityReferenceODataDeserializerProvider : DefaultODataDeserializerProvider
{
public EntityReferenceODataDeserializerProvider(IServiceProvider rootContainer)
: base(rootContainer)
{
}
public override ODataEdmTypeDeserializer GetEdmTypeDeserializer(IEdmTypeReference edmType)
{
return base.GetEdmTypeDeserializer(edmType);
}
public override ODataDeserializer GetODataDeserializer(Type type, HttpRequest request)
{
return base.GetODataDeserializer(type, request);
}
}
}