empty content bug fixed
76340695565ddb29d54052f29bca04308af43548
6 files changed
netproxy.nuspecsrc/NetproxySolution.Web/Controllers/DefaultController.cssrc/NetproxySolution.Web/wwwroot/Default.htmsrc/NetproxySolution.Web/wwwroot/Default.jssrc/NetproxySolution.Web/wwwroot/scripts/errorhandler.jssrc/NetproxySolution.Web/wwwroot/scripts/netproxy.js
diff --git a/netproxy.nuspec b/netproxy.nuspec
index 5a9d579..30cfd0f 100644
--- a/netproxy.nuspec
+++ b/netproxy.nuspec
@@ -2,7 +2,7 @@
<package >
<metadata>
<id>netproxy</id>
- <version>3.0.0</version>
+ <version>3.0.1</version>
<title>netproxy</title>
<readme>docs\README.md</readme>
<authors>alphons</authors>
@@ -11,10 +11,12 @@
<!-- <icon>icon.png</icon> -->
<projectUrl>https://github.com/alphons/netproxy</projectUrl>
<repository type="git" url="https://github.com/alphons/netproxy.git" branch="master" />
- <description>netproxy is a lite framework for posting multiparameter data in json format to
- .net core controllers (including uploads and progress events)</description>
+ <description>
+ netproxy is a lite framework for posting multiparameter data in json format to
+ .net core controllers (including uploads and progress events)
+ </description>
<dependencies>
- <dependency id="Mvc.ModelBinding.MultiParameter" version="1.1.8" />
+ <dependency id="Mvc.ModelBinding.MultiParameter" version="1.2.0" />
</dependencies>
<!-- <releaseNotes>First release.</releaseNotes> -->
<!-- <copyright>$copyright$</copyright> -->
diff --git a/src/NetproxySolution.Web/Controllers/DefaultController.cs b/src/NetproxySolution.Web/Controllers/DefaultController.cs
index d0de7a7..f44c889 100644
--- a/src/NetproxySolution.Web/Controllers/DefaultController.cs
+++ b/src/NetproxySolution.Web/Controllers/DefaultController.cs
@@ -18,14 +18,23 @@ public class DefaultController : ControllerBase
});
}
- [HttpGet("~/api/NoContent")]
- public async Task<IActionResult> NoContentAsync()
+ [HttpGet("~/api/NullContent")]
+ public async Task<IActionResult> NullContentAsync()
{
await Task.Yield();
return Ok(null);
}
+ [HttpGet("~/api/EmptyContent")]
+ public async Task<IActionResult> EmptyContent()
+ {
+ await Task.Yield();
+
+ return Ok();
+ }
+
+
public class ModelClass
{
public string? User { get; set; }
diff --git a/src/NetproxySolution.Web/wwwroot/Default.htm b/src/NetproxySolution.Web/wwwroot/Default.htm
index d67a76e..d38f674 100644
--- a/src/NetproxySolution.Web/wwwroot/Default.htm
+++ b/src/NetproxySolution.Web/wwwroot/Default.htm
@@ -24,13 +24,27 @@
<div><span id="TestLongRunningAsync" class="ui-btn">TestLongRunningAsync (get)</span></div>
- <div><span id="ReturnServerErrorAsync" class="ui-btn">ReturnServerErrorAsync (get)</span></div>
+ <fieldset>
+ <legend>CLient Handled (try catched)</legend>
+ <div><span id="ReturnServerErrorAsync" class="ui-btn">ReturnServerErrorAsync (get)</span></div>
- <div><span id="MakeServerErrorAsync" class="ui-btn">MakeServerErrorAsync (get)</span></div>
+ <div><span id="MakeServerErrorAsync" class="ui-btn">MakeServerErrorAsync (get)</span></div>
- <div><span id="NotFoundAsync" class="ui-btn">NotFoundAsync (get)</span></div>
+ <div><span id="NotFoundAsync" class="ui-btn">NotFoundAsync (get)</span></div>
+ </fieldset>
- <div><span id="NoContentAsync" class="ui-btn">NoContent (get)</span></div>
+ <fieldset>
+ <legend>Client UnHandled</legend>
+ <div><span id="ReturnServerError2Async" class="ui-btn">ReturnServerError2Async (get)</span></div>
+
+ <div><span id="MakeServerError2Async" class="ui-btn">MakeServerError2Async (get)</span></div>
+
+ <div><span id="NotFound2Async" class="ui-btn">NotFound2Async (get)</span></div>
+ </fieldset>
+
+
+ <div><span id="NullContentAsync" class="ui-btn">NullContent (get)</span></div>
+ <div><span id="EmptyContentAsync" class="ui-btn">EmptyContent (get)</span></div>
<div id="UploadExample">
<label class="UploadImage ui-btn" for="UploadImage">Upload a File</label>
diff --git a/src/NetproxySolution.Web/wwwroot/Default.js b/src/NetproxySolution.Web/wwwroot/Default.js
index 87100c2..5563459 100644
--- a/src/NetproxySolution.Web/wwwroot/Default.js
+++ b/src/NetproxySolution.Web/wwwroot/Default.js
@@ -158,17 +158,51 @@ async function MakeServerErrorAsync()
}
+async function NotFound2Async()
+{
+ r = await netproxyasync("./api/NotFound");
+
+ output.innerText = "Result:" + r.Message;
+}
+
+async function ReturnServerError2Async()
+{
+ r = await netproxyasync("./api/ReturnServerError");
+
+ output.innerText = "Result:" + r.message;
+}
+
+async function MakeServerError2Async()
+{
+ r = await netproxyasync("./api/MakeServerError");
+
+ output.innerText = "Result:" + r.message;
+}
+
+
+async function NullContentAsync()
+{
+ var nullcontent = await netproxyasync("./api/NullContent");
+ if (nullcontent === null)
+ {
+ output.innerText = 'null content has returned null thats good';
+ }
+ else
+ {
+ output.innerText = 'Error: null content should return null';
+ }
+}
-async function NoContentAsync()
+async function EmptyContentAsync()
{
- var nocontent = await netproxyasync("./api/NoContent");
- if (nocontent == null)
+ var emptycontent = await netproxyasync("./api/EmptyContent");
+ if (emptycontent === "")
{
- output.innerText = 'no content has returned null thats good';
+ output.innerText = 'empty content has returned "" thats good';
}
else
{
- output.innerText = 'Error: no content should return null';
+ output.innerText = 'Error: empty content should return ""';
}
}
diff --git a/src/NetproxySolution.Web/wwwroot/scripts/errorhandler.js b/src/NetproxySolution.Web/wwwroot/scripts/errorhandler.js
index a8ef8aa..2157122 100644
--- a/src/NetproxySolution.Web/wwwroot/scripts/errorhandler.js
+++ b/src/NetproxySolution.Web/wwwroot/scripts/errorhandler.js
@@ -10,7 +10,7 @@ window.addEventListener("unhandledrejection", async function (event)
"event": "-",
"errormessage": event.reason.message,
"errorstack": event.reason.stack,
- "path": event.reason.name,
+ "path": event.reason.path,
"source": event.type
});
}
diff --git a/src/NetproxySolution.Web/wwwroot/scripts/netproxy.js b/src/NetproxySolution.Web/wwwroot/scripts/netproxy.js
index d00ff78..55fbd4f 100644
--- a/src/NetproxySolution.Web/wwwroot/scripts/netproxy.js
+++ b/src/NetproxySolution.Web/wwwroot/scripts/netproxy.js
@@ -3,7 +3,7 @@
* @name pure-dom netproxy and template api
*
* @author Alphons van der Heijden <alphons@heijden.com>
- * @version 3.0.0 (last revision Nov, 2024)
+ * @version 3.0.1 (last revision Nov, 2024)
* @copyright (c) 2019-2024 Alphons van der Heijden
* @alias netproxy, netproxyasync, Element.Template, TemplateHtml
*
@@ -36,18 +36,18 @@
// netproxy functionaliteit
window.netproxy = function (url, data, onsuccess, onerror, onprogress)
{
- var spinner = document.getElementById("netproxyspinner");
+ const spinner = document.getElementById("netproxyspinner");
if (typeof remote !== 'undefined')
url = remote + url;
- if (spinner)
- var timeoutSpinner = setTimeout(() => spinner.style.display = 'block', 1000);
- var xhr = new XMLHttpRequest();
+ var timeoutSpinner = setTimeout(() => spinner.style.display = 'block', 1000);
+ const xhr = new XMLHttpRequest();
xhr.open(data ? 'POST' : 'GET', url, true);
xhr.withCredentials = url.indexOf(window.location.host) < 0 && url[0] !== '/';
if (!(data instanceof FormData))
- xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
- if (data instanceof FormData)
+ {
xhr.timeout = 30000;
+ xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
+ }
xhr.onloadend = function ()
{
if (timeoutSpinner)
@@ -77,16 +77,24 @@
setTimeout(() => URL.revokeObjectURL(a.href), 40000);
return;
}
+
+ let response = xhr.response;
+ try
+ {
+ response = JSON.parse(xhr.responseText);
+ }
+ catch (e)
+ {
+ }
+
try
{
- const parsedResponse = JSON.parse(xhr.responseText);
if (typeof onsuccess === 'function')
- onsuccess.call(parsedResponse, parsedResponse);
+ onsuccess.call(response, response);
return;
}
- catch (e)
+ catch (error)
{
- const error = new Error("Response kon niet worden geparsed.");
if (typeof onerror === 'function')
{
onerror.call(xhr, error);
@@ -97,7 +105,8 @@
}
if (xhr.status >= 400)
{
- const error = new Error(`HTTP error! Status: ${xhr.status}`);
+ const error = new Error(`Http:${xhr.status}`);
+ error.path = url;
if (typeof onerror === 'function')
{
onerror.call(xhr, error);
@@ -108,8 +117,9 @@
if (xhr.status === 0)
{
const error = xhr.timedout
- ? new Error(`Timeout van ${xhr.timeout}ms overschreden`)
- : new Error("Netwerkfout of verzoek geannuleerd");
+ ? new Error(`Timeout ${xhr.timeout}ms for ${url}`)
+ : new Error(`Network error or request canceled for ${url}`);
+ error.path = url;
if (typeof onerror === 'function')
{
onerror.call(xhr, error);