Skip to content

Commit 895eda0

Browse files
committed
Model binding initial commit
0 parents  commit 895eda0

28 files changed

+2997
-0
lines changed

.gitignore

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# User-specific files
5+
*.suo
6+
*.user
7+
*.userosscache
8+
*.sln.docstates
9+
10+
# User-specific files (MonoDevelop/Xamarin Studio)
11+
*.userprefs
12+
13+
# Build results
14+
[Dd]ebug/
15+
[Dd]ebugPublic/
16+
[Rr]elease/
17+
[Rr]eleases/
18+
[Xx]64/
19+
[Xx]86/
20+
[Bb]uild/
21+
bld/
22+
[Bb]in/
23+
[Oo]bj/
24+
25+
# Visual Studio 2015 cache/options directory
26+
.vs/
27+
# Uncomment if you have tasks that create the project's static files in wwwroot
28+
#wwwroot/
29+
30+
# MSTest test Results
31+
[Tt]est[Rr]esult*/
32+
[Bb]uild[Ll]og.*
33+
34+
# NUNIT
35+
*.VisualState.xml
36+
TestResult.xml
37+
38+
# Build Results of an ATL Project
39+
[Dd]ebugPS/
40+
[Rr]eleasePS/
41+
dlldata.c
42+
43+
# DNX
44+
project.lock.json
45+
artifacts/
46+
47+
*_i.c
48+
*_p.c
49+
*_i.h
50+
*.ilk
51+
*.meta
52+
*.obj
53+
*.pch
54+
*.pdb
55+
*.pgc
56+
*.pgd
57+
*.rsp
58+
*.sbr
59+
*.tlb
60+
*.tli
61+
*.tlh
62+
*.tmp
63+
*.tmp_proj
64+
*.log
65+
*.vspscc
66+
*.vssscc
67+
.builds
68+
*.pidb
69+
*.svclog
70+
*.scc
71+
72+
# Chutzpah Test files
73+
_Chutzpah*
74+
75+
# Visual C++ cache files
76+
ipch/
77+
*.aps
78+
*.ncb
79+
*.opendb
80+
*.opensdf
81+
*.sdf
82+
*.cachefile
83+
*.VC.db
84+
85+
# Visual Studio profiler
86+
*.psess
87+
*.vsp
88+
*.vspx
89+
*.sap
90+
91+
# TFS 2012 Local Workspace
92+
$tf/
93+
94+
# Guidance Automation Toolkit
95+
*.gpState
96+
97+
# ReSharper is a .NET coding add-in
98+
_ReSharper*/
99+
*.[Rr]e[Ss]harper
100+
*.DotSettings.user
101+
102+
# JustCode is a .NET coding add-in
103+
.JustCode
104+
105+
# TeamCity is a build add-in
106+
_TeamCity*
107+
108+
# DotCover is a Code Coverage Tool
109+
*.dotCover
110+
111+
# NCrunch
112+
_NCrunch_*
113+
.*crunch*.local.xml
114+
nCrunchTemp_*
115+
116+
# MightyMoose
117+
*.mm.*
118+
AutoTest.Net/
119+
120+
# Web workbench (sass)
121+
.sass-cache/
122+
123+
# Installshield output folder
124+
[Ee]xpress/
125+
126+
# DocProject is a documentation generator add-in
127+
DocProject/buildhelp/
128+
DocProject/Help/*.HxT
129+
DocProject/Help/*.HxC
130+
DocProject/Help/*.hhc
131+
DocProject/Help/*.hhk
132+
DocProject/Help/*.hhp
133+
DocProject/Help/Html2
134+
DocProject/Help/html
135+
136+
# Click-Once directory
137+
publish/
138+
139+
# Publish Web Output
140+
*.[Pp]ublish.xml
141+
*.azurePubxml
142+
143+
# TODO: Un-comment the next line if you do not want to checkin
144+
# your web deploy settings because they may include unencrypted
145+
# passwords
146+
#*.pubxml
147+
*.publishproj
148+
149+
# NuGet Packages
150+
*.nupkg
151+
# The packages folder can be ignored because of Package Restore
152+
**/packages/*
153+
# except build/, which is used as an MSBuild target.
154+
!**/packages/build/
155+
# Uncomment if necessary however generally it will be regenerated when needed
156+
#!**/packages/repositories.config
157+
# NuGet v3's project.json files produces more ignoreable files
158+
*.nuget.props
159+
*.nuget.targets
160+
161+
# Microsoft Azure Build Output
162+
csx/
163+
*.build.csdef
164+
165+
# Microsoft Azure Emulator
166+
ecf/
167+
rcf/
168+
169+
# Windows Store app package directory
170+
AppPackages/
171+
BundleArtifacts/
172+
173+
# Visual Studio cache files
174+
# files ending in .cache can be ignored
175+
*.[Cc]ache
176+
# but keep track of directories ending in .cache
177+
!*.[Cc]ache/
178+
179+
# Others
180+
ClientBin/
181+
[Ss]tyle[Cc]op.*
182+
~$*
183+
*~
184+
*.dbmdl
185+
*.dbproj.schemaview
186+
*.pfx
187+
*.publishsettings
188+
node_modules/
189+
orleans.codegen.cs
190+
191+
# RIA/Silverlight projects
192+
Generated_Code/
193+
194+
# Backup & report files from converting an old project file
195+
# to a newer Visual Studio version. Backup files are not needed,
196+
# because we have git ;-)
197+
_UpgradeReport_Files/
198+
Backup*/
199+
UpgradeLog*.XML
200+
UpgradeLog*.htm
201+
202+
# SQL Server files
203+
*.mdf
204+
*.ldf
205+
206+
# Business Intelligence projects
207+
*.rdl.data
208+
*.bim.layout
209+
*.bim_*.settings
210+
211+
# Microsoft Fakes
212+
FakesAssemblies/
213+
214+
# GhostDoc plugin setting file
215+
*.GhostDoc.xml
216+
217+
# Node.js Tools for Visual Studio
218+
.ntvs_analysis.dat
219+
220+
# Visual Studio 6 build log
221+
*.plg
222+
223+
# Visual Studio 6 workspace options file
224+
*.opt
225+
226+
# Visual Studio LightSwitch build output
227+
**/*.HTMLClient/GeneratedArtifacts
228+
**/*.DesktopClient/GeneratedArtifacts
229+
**/*.DesktopClient/ModelManifest.xml
230+
**/*.Server/GeneratedArtifacts
231+
**/*.Server/ModelManifest.xml
232+
_Pvt_Extensions
233+
234+
# LightSwitch generated files
235+
GeneratedArtifacts/
236+
ModelManifest.xml
237+
238+
# Paket dependency manager
239+
.paket/paket.exe
240+
241+
# FAKE - F# Make
242+
.fake/
243+
244+
# DB
245+
musicdb.sqlite

LICENSE.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
2+
these files except in compliance with the License. You may obtain a copy of the
3+
License at
4+
5+
http://www.apache.org/licenses/LICENSE-2.0
6+
7+
Unless required by applicable law or agreed to in writing, software distributed
8+
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9+
CONDITIONS OF ANY KIND, either express or implied. See the License for the
10+
specific language governing permissions and limitations under the License.

NetCoreStack.ModelBinding.sln

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.27004.2009
5+
MinimumVisualStudioVersion = 15.0.26124.0
6+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{98ABFCE8-C18F-4B9A-AEFA-44C9EAFDA6AC}"
7+
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CFE9C920-7478-4BA6-BFF6-3E83DBBAEAAC}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCoreStack.ModelBinding", "src\NetCoreStack.ModelBinding\NetCoreStack.ModelBinding.csproj", "{7718D656-8F95-40E7-8D87-F49D13D4B1B4}"
11+
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetCoreStack.ModelBinding.Tests", "test\NetCoreStack.ModelBinding.Tests\NetCoreStack.ModelBinding.Tests.csproj", "{F27006FA-DF79-40E5-BB8E-A5A392897845}"
13+
EndProject
14+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{611EE3C0-3583-4904-807E-8DA482264116}"
15+
ProjectSection(SolutionItems) = preProject
16+
LICENSE.txt = LICENSE.txt
17+
README.md = README.md
18+
EndProjectSection
19+
EndProject
20+
Global
21+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
22+
Debug|Any CPU = Debug|Any CPU
23+
Debug|x64 = Debug|x64
24+
Debug|x86 = Debug|x86
25+
Release|Any CPU = Release|Any CPU
26+
Release|x64 = Release|x64
27+
Release|x86 = Release|x86
28+
EndGlobalSection
29+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
30+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
32+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Debug|x64.ActiveCfg = Debug|Any CPU
33+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Debug|x64.Build.0 = Debug|Any CPU
34+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Debug|x86.ActiveCfg = Debug|Any CPU
35+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Debug|x86.Build.0 = Debug|Any CPU
36+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
37+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Release|Any CPU.Build.0 = Release|Any CPU
38+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Release|x64.ActiveCfg = Release|Any CPU
39+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Release|x64.Build.0 = Release|Any CPU
40+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Release|x86.ActiveCfg = Release|Any CPU
41+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4}.Release|x86.Build.0 = Release|Any CPU
42+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
43+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Debug|Any CPU.Build.0 = Debug|Any CPU
44+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Debug|x64.ActiveCfg = Debug|Any CPU
45+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Debug|x64.Build.0 = Debug|Any CPU
46+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Debug|x86.ActiveCfg = Debug|Any CPU
47+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Debug|x86.Build.0 = Debug|Any CPU
48+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Release|Any CPU.ActiveCfg = Release|Any CPU
49+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Release|Any CPU.Build.0 = Release|Any CPU
50+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Release|x64.ActiveCfg = Release|Any CPU
51+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Release|x64.Build.0 = Release|Any CPU
52+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Release|x86.ActiveCfg = Release|Any CPU
53+
{F27006FA-DF79-40E5-BB8E-A5A392897845}.Release|x86.Build.0 = Release|Any CPU
54+
EndGlobalSection
55+
GlobalSection(SolutionProperties) = preSolution
56+
HideSolutionNode = FALSE
57+
EndGlobalSection
58+
GlobalSection(NestedProjects) = preSolution
59+
{7718D656-8F95-40E7-8D87-F49D13D4B1B4} = {98ABFCE8-C18F-4B9A-AEFA-44C9EAFDA6AC}
60+
{F27006FA-DF79-40E5-BB8E-A5A392897845} = {CFE9C920-7478-4BA6-BFF6-3E83DBBAEAAC}
61+
EndGlobalSection
62+
GlobalSection(ExtensibilityGlobals) = postSolution
63+
SolutionGuid = {C05ABF6B-B553-4058-82FA-26F0A0D1881D}
64+
EndGlobalSection
65+
EndGlobal

README.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
## NetCoreStack.ModelBinding
2+
#### Model Binding library for .NET Core without HttpContext dependency
3+
4+
This library can be used for model binding without http request.
5+
A lot of the code was inspired from ASP.NET Core MVC but this is a complete (and a more lightweight) rewrite. I'll refer to this library as "Context free Model Binding".
6+
7+
### Sample Models
8+
```csharp
9+
private class Person
10+
{
11+
public string Name { get; set; }
12+
public IList<Address> Addresses { get; set; }
13+
}
14+
15+
private class Address
16+
{
17+
public int Zip { get; set; }
18+
19+
public string Street { get; set; }
20+
21+
public City City { get; set; }
22+
}
23+
24+
private class City
25+
{
26+
public string Name { get; set; }
27+
public float Latitude { get; set; }
28+
public float Longitude { get; set; }
29+
}
30+
```
31+
32+
### Model Binding
33+
```csharp
34+
var binder = IndexModelBinderHelper.GetIndexModelBinder();
35+
var formCollection = new FormCollection(new Dictionary<string, StringValues>()
36+
{
37+
{ "Name", new [] { "NetCoreStack" } },
38+
{ "Addresses.index", new [] { "Key1", "Key2" } },
39+
{ "Addresses[Key1].Street", new [] { "Street1" } },
40+
{ "Addresses[Key1].City.Name", new [] { "Yalova" } },
41+
{ "Addresses[Key1].City.Latitude", new [] { "40.631281" } },
42+
{ "Addresses[Key1].City.Longitude", new [] { "29.286804" } },
43+
{ "Addresses[Key2].Street", new [] { "Street2" } },
44+
});
45+
46+
var valueProviders = IndexModelBinderHelper.GetValueProviders(formCollection);
47+
var parameter = new ParameterDescriptor()
48+
{
49+
Name = "parameter",
50+
ParameterType = typeof(Person)
51+
};
52+
53+
var modelState = new ModelStateDictionary();
54+
55+
// Act
56+
var modelBindingResult = await binder.BindModelAsync(new CompositeValueProvider(valueProviders), modelState, parameter);
57+
```
58+
59+
### Prerequisites
60+
> [ASP.NET Core](https://github.com/aspnet/Home)

0 commit comments

Comments
 (0)