Skip to content

New ValueProviders and GenericModelBinder to do multiparameter model binding

Notifications You must be signed in to change notification settings

alphons/Mvc.ModelBinding.MultiParameter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mvc.ModelBinding.MultiParameter

Nuget package https://www.nuget.org/packages/Mvc.ModelBinding.MultiParameter/

Calling controller methods using multiple unique parameters.

[HttpPost("~/api/SomeMethod/{SomeParameter2}")]
public IActionResult SomeMethod(
	string Referer,			    // "https://localhost:44346/"
	string SomeParameter2,		// "two"
	string SomeParameter3,		// "three"
	ApiModel SomeParameter4,	//  {four}
	double SomeParameter5,		//  5.5 (multi binding FromBody)
	int SomeParameter6)		    //  6 (multi binding FromQuery)
{
	return Ok();
}

Using attributes to emphasize the source:

[HttpPost]
[Route("~/api/OtherMethod/{SomeParameter2}")]
public IActionResult OtherMethod(
	[FromCooky(Name = ".AspNetCore.Session")] string SomeParameter0, // #######
	[FromHeader(Name = "Referer")] string SomeParameter1,	// "https://localhost:44346/"
	[FromRoute] string SomeParameter2,	// "two"
	[FromQuery] string SomeParameter3,	// "three"
	[FromBody] ApiModel SomeParameter4,	//  {four}
	[FromBody] double SomeParameter5,	//  5.5 (multi binding FromBody)
	[FromQuery] int SomeParameter6)		//  6 (multi binding FromQuery)
{
	return Ok();
}

This test uses netproxy javascript caller for posting Json to controllers.

r = await netproxyasync("./api/SomeMethod/two?SomeParameter3=three&SomeParameter6=6",
{
  "SomeParameter4": // Now the beast has a name
  {
    Name: "four",
    "Users":
    [
      [{ Name: "User00", Alias: ['aliasa', 'aliasb', 'aliasc'] }, { Name: "User01" }],
      [{ Name: "User10" }, { Name: "User11" }],
      [{ Name: "User20" }, { Name: "User21" }]
    ]
  },
  "SomeParameter5": 5.5 // double binder
});

For the multi parameter binding use the WithMultiParameterModelBinding. Example Program.cs:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    ContentRootPath = AppDomain.CurrentDomain.BaseDirectory
});

builder.Services.AddMvcCore().WithMultiParameterModelBinding();

var app = builder.Build();
app.UseRouting();
app.MapControllers();
app.UseDefaultFiles();
app.UseStaticFiles();
app.Run();

About

New ValueProviders and GenericModelBinder to do multiparameter model binding

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published