done speedtesting and revised the documentation

alphons <alphons@heijden.com> 24 Nov 2024, 13:11
2d1dfc6c2ac71e92c2c5fbc7475c44e61c1944c9
6 files changed
  • README.md
  • src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
  • src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/SpeedController.cs
  • src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/SpeedTest.js
  • src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
  • src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/speedtest.html
diff --git a/README.md b/README.md
index ff62cf4..ad78517 100644
--- a/README.md
+++ b/README.md
@@ -2,45 +2,41 @@
Nuget package https://www.nuget.org/packages/Mvc.ModelBinding.MultiParameter/
-Calling controller methods using multiple parameter binding.
+Calling controller methods using multiple unique parameters.
```c#
-[HttpPost]
-[Route("~/api/SomeMethod/{SomeParameter2}")]
-public async Task<IActionResult> SomeMethod(
- [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] string SomeParameter5, // "five" (multi binding FromBody)
- [FromQuery]string SomeParameter6) // "six" (multi binding FromQuery)
+[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)
{
- await Task.Yield();
return Ok();
}
```
-And if parameter names are unique this can be simplified to:
+Using attributes to emphasize the source:
```c#
[HttpPost]
[Route("~/api/OtherMethod/{SomeParameter2}")]
-public async Task<IActionResult> OtherMethod(
- string Referer, // "https://localhost:44346/"
- string SomeParameter2, // "two"
- string SomeParameter3, // "three"
- ApiModel SomeParameter4, // {four}
- string SomeParameter5, // "five" (multi binding FromBody)
- string SomeParameter6) // "six" (multi binding FromQuery)
+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)
{
- await Task.Yield();
return Ok();
}
-```
This test uses `netproxy` javascript caller for posting Json to controllers.
```javascript
-r = await netproxyasync("./api/SomeMethod/two?SomeParameter3=three&SomeParameter6=six",
+r = await netproxyasync("./api/SomeMethod/two?SomeParameter3=three&SomeParameter6=6",
{
"SomeParameter4": // Now the beast has a name
{
@@ -52,7 +48,7 @@ r = await netproxyasync("./api/SomeMethod/two?SomeParameter3=three&SomeParameter
[{ Name: "User20" }, { Name: "User21" }]
]
},
- "SomeParameter5": "five" // double binder
+ "SomeParameter5": 5.5 // double binder
});
```
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs b/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
index 7ac80f7..58fb53c 100644
--- a/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
@@ -306,7 +306,6 @@ public class ApiController : ControllerBase
});
}
-
[HttpPost("~/api/ComplexString")]
public async Task<IActionResult> ComplexString(string Name)
{
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/SpeedController.cs b/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/SpeedController.cs
new file mode 100644
index 0000000..3e6e2c1
--- /dev/null
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/SpeedController.cs
@@ -0,0 +1,45 @@
+using Microsoft.AspNetCore.Mvc;
+
+
+namespace Mvc.ModelBinding.MultiParameter.Testing.Controllers;
+
+[Route("~/api")]
+public class SpeedController : ControllerBase
+{
+ public class Usert
+ {
+ public string Name { get; set; } = string.Empty;
+
+ public List<string> Alias { get; set; } = [];
+ }
+
+ public class ApiModel
+ {
+ public string Name { get; set; } = string.Empty;
+ public List<List<Usert>> Users { get; set; } = [];
+
+ public override string ToString() => Name;
+ }
+
+ [HttpPost("~/api/Speedtest/{SomeParameter2}")]
+ public IActionResult Speedtest(
+ string Referer,
+ string SomeParameter2,
+ string SomeParameter3,
+ ApiModel SomeParameter4,
+ double SomeParameter5,
+ int SomeParameter6)
+ {
+ return Ok(new
+ {
+ Referer,
+ SomeParameter2,
+ SomeParameter3,
+ SomeParameter4,
+ SomeParameter5,
+ SomeParameter6
+ });
+ }
+
+
+}
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/SpeedTest.js b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/SpeedTest.js
new file mode 100644
index 0000000..8a3433e
--- /dev/null
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/SpeedTest.js
@@ -0,0 +1,55 @@
+const output = $id('Output');
+
+const input = {
+ "SomeParameter4":
+ {
+ Name: "four",
+ "Users":
+ [
+ [{ Name: "User00", Alias: ['aliasa', 'aliasb', 'aliasc'] }, { Name: "User01" }],
+ [{ Name: "User10" }, { Name: "User11" }],
+ [{ Name: "User20" }, { Name: "User21" }]
+ ]
+ },
+ "SomeParameter5": 5.5 // double binder
+};
+
+
+onReady(() =>
+{
+ PageEvents();
+ Init();
+});
+
+function PageEvents()
+{
+ document.on("click", async function (e)
+ {
+ if (e.target.id && typeof window[e.target.id] === "function")
+ {
+ const func = window[e.target.id].call(e, e);
+ if (func instanceof Promise)
+ await func;
+ }
+ });
+}
+
+function Init()
+{
+ netproxy("./api/HelloWorld"); // Makes session (and cookie)
+}
+
+async function SpeedTest()
+{
+ output.innerText = '';
+
+ const tasks = Array.from({ length: 50 }, () => MultiBinderTest());
+ await Promise.all(tasks);
+ console.log("All tasks completed");
+}
+
+async function MultiBinderTest()
+{
+ const result = await netproxyasync("./api/Speedtest/two?SomeParameter3=three&SomeParameter6=6", input);
+
+}
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
index f4e2163..320bd42 100644
--- a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
@@ -31,5 +31,6 @@
<div><span id="PostIt" class="ui-btn">PostIt</span></div>
+ <p><a href="speedtest.html">SpeedTest</a></p>
</body>
</html>
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/speedtest.html b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/speedtest.html
new file mode 100644
index 0000000..39626e9
--- /dev/null
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/speedtest.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <title>Just Testing</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta charset="utf-8" />
+
+ <!-- nugetpackage netproxy -->
+ <link href="css/netproxyspinner.css" rel="stylesheet" />
+ <script src="scripts/macros.js?1" defer></script>
+ <script src="scripts/netproxy.js?1" defer></script>
+
+ <link href="Default.css" rel="stylesheet" />
+ <link href="Ui.css" rel="stylesheet" />
+ <script src="SpeedTest.js" defer></script>
+
+</head>
+<body>
+ <img src="images/netproxyspinner.gif" id="netproxyspinner" />
+
+ <div><span id="SpeedTest" class="ui-btn">Start Speed Test</span></div>
+
+ <div id="Output"></div>
+
+</body>
+</html>