4
4
< meta charset ="utf-8 ">
5
5
< meta content ="width=device-width, initial-scale=1.0 " name ="viewport ">
6
6
< title > JSON:API .NET Core</ title >
7
- < meta content ="" name ="descriptison ">
8
- < meta content ="" name ="keywords ">
7
+ < meta content ="A framework for building json:api compliant REST APIs using .NET Core and Entity Framework Core " name ="description ">
8
+ < meta content ="jsonapidotnetcore jsonapi json:api dotnetcore " name ="keywords ">
9
9
< link href ="favicon.ico " rel ="icon ">
10
10
< link href ="favicon.ico " rel ="apple-touch-icon ">
11
11
< link href ="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,600,600i,700,700i " rel ="stylesheet ">
@@ -63,71 +63,72 @@ <h4>Extensibility</h4>
63
63
</ div >
64
64
</ section >
65
65
< section id ="services " class ="services section-bg ">
66
- < div class ="container ">
67
- < div class ="section-title " data-aos ="fade-up ">
68
- < h2 > Features</ h2 >
69
- < p > The following features are supported, from HTTP all the way down to the database</ p >
70
- </ div >
71
- < div class ="row ">
72
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='filter '>
73
- < div class ="icon-box ">
74
- < div class ="icon "> < i class ="bx bxs-filter-alt "> </ i > </ div >
75
- < h4 class ="title "> Filtering</ h4 >
76
- < p class ="description "> Perform compound filtering using the < code > filter</ code > query string parameter</ p >
77
- </ div >
78
- </ div >
79
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="200 " id ='sort '>
80
- < div class ="icon-box ">
81
- < div class ="icon "> < i class ="bx bx-sort-z-a "> </ i > </ div >
82
- < h4 class ="title "> Sorting</ h4 >
83
- < p class ="description "> Order resources on one or multiple attributes using the < code > sort</ code > query string parameter</ p >
84
- </ div >
85
- </ div >
86
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="300 " id ='pagination '>
87
- < div class ="icon-box ">
88
- < div class ="icon "> < i class ="bx bx-note "> </ i > </ div >
89
- < h4 class ="title "> Pagination</ h4 >
90
- < p class ="description "> Leverage the benefits of paginated resources with the < code > page</ code > query string parameter</ p >
91
- </ div >
92
- </ div >
93
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="400 " id ='selection '>
94
- < div class ="icon-box ">
95
- < div class ="icon "> < i class ="bx bxs-select-multiple "> </ i > </ div >
96
- < h4 class ="title "> Sparse fieldset selection</ h4 >
97
- < p class ="description "> Get only the data that you need using the < code > fields</ code > query string parameter</ p >
98
- </ div >
99
- </ div >
100
- </ div >
101
- < div class ="row ">
102
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='include '>
103
- < div class ="icon-box ">
104
- < div class ="icon "> < i class ="bx bxs-vector "> </ i > </ div >
105
- < h4 class ="title "> Relationship inclusion</ h4 >
106
- < p class ="description "> Side-load related resources of nested relationships using the < code > include</ code > query string parameter</ p >
107
- </ div >
108
- </ div >
109
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='security '>
110
- < div class ="icon-box ">
111
- < div class ="icon "> < i class ='bx bxs-lock '> </ i > </ div >
112
- < h4 class ="title "> Security</ h4 >
113
- < p class ="description "> Configure permissions, such as view/create/change/sort/filter of attributes and relationships</ p >
114
- </ div >
115
- </ div >
116
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='validation '>
117
- < div class ="icon-box ">
118
- < div class ="icon "> < i class ='bx bx-check-double '> </ i > </ div >
119
- < h4 class ="title "> Validation</ h4 >
120
- < p class ="description "> Validate incoming requests using built-in ASP.NET Core < code > ModelState</ code > validation, which works seamlessly with partial updates</ p >
121
- </ div >
122
- </ div >
123
- < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="200 " id ='customizable '>
124
- < div class ="icon-box ">
125
- < div class ="icon "> < i class ='bx bxs-category-alt '> </ i > </ div >
126
- < h4 class ="title "> Customizable</ h4 >
127
- < p class ="description "> Use various extensibility points to intercept and run custom code, besides just model annotations</ p >
128
- </ div >
129
- </ div >
130
- </ div >
66
+ < div class ="container ">
67
+ < div class ="section-title " data-aos ="fade-up ">
68
+ < h2 > Features</ h2 >
69
+ < p > The following features are supported, from HTTP all the way down to the database</ p >
70
+ </ div >
71
+ < div class ="row ">
72
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='filter '>
73
+ < div class ="icon-box ">
74
+ < div class ="icon "> < i class ="bx bxs-filter-alt "> </ i > </ div >
75
+ < h4 class ="title "> Filtering</ h4 >
76
+ < p class ="description "> Perform compound filtering using the < code > filter</ code > query string parameter</ p >
77
+ </ div >
78
+ </ div >
79
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="200 " id ='sort '>
80
+ < div class ="icon-box ">
81
+ < div class ="icon "> < i class ="bx bx-sort-z-a "> </ i > </ div >
82
+ < h4 class ="title "> Sorting</ h4 >
83
+ < p class ="description "> Order resources on one or multiple attributes using the < code > sort</ code > query string parameter</ p >
84
+ </ div >
85
+ </ div >
86
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="300 " id ='pagination '>
87
+ < div class ="icon-box ">
88
+ < div class ="icon "> < i class ="bx bx-note "> </ i > </ div >
89
+ < h4 class ="title "> Pagination</ h4 >
90
+ < p class ="description "> Leverage the benefits of paginated resources with the < code > page</ code > query string parameter</ p >
91
+ </ div >
92
+ </ div >
93
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="400 " id ='selection '>
94
+ < div class ="icon-box ">
95
+ < div class ="icon "> < i class ="bx bxs-select-multiple "> </ i > </ div >
96
+ < h4 class ="title "> Sparse fieldset selection</ h4 >
97
+ < p class ="description "> Get only the data that you need using the < code > fields</ code > query string parameter</ p >
98
+ </ div >
99
+ </ div >
100
+ </ div >
101
+ < div class ="row ">
102
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='include '>
103
+ < div class ="icon-box ">
104
+ < div class ="icon "> < i class ="bx bxs-vector "> </ i > </ div >
105
+ < h4 class ="title "> Relationship inclusion</ h4 >
106
+ < p class ="description "> Side-load related resources of nested relationships using the < code > include</ code > query string parameter</ p >
107
+ </ div >
108
+ </ div >
109
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='security '>
110
+ < div class ="icon-box ">
111
+ < div class ="icon "> < i class ='bx bxs-lock '> </ i > </ div >
112
+ < h4 class ="title "> Security</ h4 >
113
+ < p class ="description "> Configure permissions, such as view/create/change/sort/filter of attributes and relationships</ p >
114
+ </ div >
115
+ </ div >
116
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="100 " id ='validation '>
117
+ < div class ="icon-box ">
118
+ < div class ="icon "> < i class ='bx bx-check-double '> </ i > </ div >
119
+ < h4 class ="title "> Validation</ h4 >
120
+ < p class ="description "> Validate incoming requests using built-in ASP.NET Core < code > ModelState</ code > validation, which works seamlessly with partial updates</ p >
121
+ </ div >
122
+ </ div >
123
+ < div feature class ="col-md-6 col-lg-3 d-flex align-items-stretch " data-aos ="zoom-in " data-aos-delay ="200 " id ='customizable '>
124
+ < div class ="icon-box ">
125
+ < div class ="icon "> < i class ='bx bxs-category-alt '> </ i > </ div >
126
+ < h4 class ="title "> Customizable</ h4 >
127
+ < p class ="description "> Use various extensibility points to intercept and run custom code, besides just model annotations</ p >
128
+ </ div >
129
+ </ div >
130
+ </ div >
131
+ </ div >
131
132
</ section >
132
133
< section id ="code-example " class ="services ">
133
134
< div class ="container ">
@@ -160,12 +161,12 @@ <h4 class="title">Resource</h4>
160
161
public Person Author { get; set; }
161
162
162
163
[HasMany]
163
- public ICollection<Revision > Revisions { get; set; }
164
+ public ICollection<Revision > Revisions { get; set; }
164
165
165
166
[HasManyThrough(nameof(ArticleTags))]
166
167
[NotMapped]
167
- public ICollection<Tag > Tags { get; set; }
168
- public ICollection<ArticleTag > ArticleTags { get; set; }
168
+ public ICollection<Tag > Tags { get; set; }
169
+ public ICollection<ArticleTag > ArticleTags { get; set; }
169
170
}</ code >
170
171
</ pre >
171
172
</ div >
@@ -274,4 +275,4 @@ <h4>Contact us</h4>
274
275
< script src ="https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.js "> </ script >
275
276
< script src ="styles/home.js "> </ script >
276
277
</ body >
277
- </ html >
278
+ </ html >
0 commit comments