-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathStartup.cs
73 lines (63 loc) · 2.52 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
using graphqlodata.Middlewares;
using graphqlodata.Models;
using Microsoft.AspNetCore.OData.Batch;
using Microsoft.AspNetCore.OData.Extensions;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
using System.Linq;
using Microsoft.AspNetCore.OData;
namespace graphqlodata
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting();
services.AddControllers().AddOData(
options => options
.AddRouteComponents("odata", GetEdmModel(), new DefaultODataBatchHandler())
.Filter().Expand().Select().SetMaxTop(50).OrderBy());
services.AddGraphQLOData(); //TODO: https://services.odata.org/V4/(S(v0jrha4xovrjwocj5redsnrt))/TripPinServiceRW/$metadata
services.AddRepositories();
}
// 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();
}
app.UseHttpsRedirection();
app.UseGraphQLOData();
app.UseODataBatching();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
private IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Book>("Books");
var customers = builder.EntitySet<Customer>("Customers");
var action = builder.Action("AddBook");
action.ReturnsFromEntitySet<Book>("Books");
action.Parameter<int>("id");
action.Parameter<string>("author");
action.Parameter<string>("title");
builder.Function("GetSomeBook")
.ReturnsFromEntitySet<Book>("Books")
.Parameter<string>("title");
builder.Function("GetSomeComplexBook")
.ReturnsFromEntitySet<Book>("Books")
.Parameter<Address>("title");
return builder.GetEdmModel();
}
}
}