Fix server producing a timeout on setting status code without returning a body
This commit is contained in:
parent
e1e1596e54
commit
14ab546d4d
|
|
@ -159,11 +159,11 @@ public sealed class HttpServer {
|
||||||
foreach (var queryKV in queryStringArgs) {
|
foreach (var queryKV in queryStringArgs) {
|
||||||
var queryKVSplitted = queryKV.Split('=');
|
var queryKVSplitted = queryKV.Split('=');
|
||||||
if (queryKVSplitted.Length != 2) {
|
if (queryKVSplitted.Length != 2) {
|
||||||
rc.SetStatusCodeAndDispose(HttpStatusCode.BadRequest, "Malformed request URL parameters");
|
await rc.SetStatusCodeAndDisposeAsync(HttpStatusCode.BadRequest, "Malformed request URL parameters");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!parsedQParams.TryAdd(WebUtility.UrlDecode(queryKVSplitted[0]), WebUtility.UrlDecode(queryKVSplitted[1]))) {
|
if (!parsedQParams.TryAdd(WebUtility.UrlDecode(queryKVSplitted[0]), WebUtility.UrlDecode(queryKVSplitted[1]))) {
|
||||||
rc.SetStatusCodeAndDispose(HttpStatusCode.BadRequest, "Duplicate request URL parameters");
|
await rc.SetStatusCodeAndDisposeAsync(HttpStatusCode.BadRequest, "Duplicate request URL parameters");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -176,14 +176,14 @@ public sealed class HttpServer {
|
||||||
if (stringToTypeParameterConverters[qparamInfo.type].TryConvertFromString(qparamValue, out object objRes)) {
|
if (stringToTypeParameterConverters[qparamInfo.type].TryConvertFromString(qparamValue, out object objRes)) {
|
||||||
convertedQParamValues[i] = objRes;
|
convertedQParamValues[i] = objRes;
|
||||||
} else {
|
} else {
|
||||||
rc.SetStatusCodeAndDispose(HttpStatusCode.BadRequest);
|
await rc.SetStatusCodeAndDisposeAsync(HttpStatusCode.BadRequest);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (qparamInfo.isOptional) {
|
if (qparamInfo.isOptional) {
|
||||||
convertedQParamValues[i] = null!;
|
convertedQParamValues[i] = null!;
|
||||||
} else {
|
} else {
|
||||||
rc.SetStatusCodeAndDispose(HttpStatusCode.BadRequest, $"Missing required query parameter {qparamName}");
|
await rc.SetStatusCodeAndDisposeAsync(HttpStatusCode.BadRequest, $"Missing required query parameter {qparamName}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,24 +25,29 @@ public class RequestContext : IDisposable {
|
||||||
|
|
||||||
public void SetStatusCode(HttpStatusCode status) => SetStatusCode((int) status);
|
public void SetStatusCode(HttpStatusCode status) => SetStatusCode((int) status);
|
||||||
|
|
||||||
public void SetStatusCodeAndDispose(int status) {
|
public async Task SetStatusCodeAndDisposeAsync(int status) {
|
||||||
using (this)
|
using (this) {
|
||||||
SetStatusCode(status);
|
SetStatusCode(status);
|
||||||
|
await WriteToRespAsync("\n\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetStatusCodeAndDispose(HttpStatusCode status) {
|
public async Task SetStatusCodeAndDisposeAsync(HttpStatusCode status) {
|
||||||
using (this)
|
using (this) {
|
||||||
SetStatusCode((int) status);
|
SetStatusCode((int) status);
|
||||||
|
await WriteToRespAsync("\n\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void SetStatusCodeAndDispose(int status, string description) {
|
public async Task SetStatusCodeAndDisposeAsync(int status, string description) {
|
||||||
using (this) {
|
using (this) {
|
||||||
ListenerContext.Response.StatusCode = status;
|
ListenerContext.Response.StatusCode = status;
|
||||||
ListenerContext.Response.StatusDescription = description;
|
ListenerContext.Response.StatusDescription = description;
|
||||||
|
await WriteToRespAsync("\n\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void SetStatusCodeAndDispose(HttpStatusCode status, string description) => SetStatusCodeAndDispose((int) status, description);
|
public async Task SetStatusCodeAndDisposeAsync(HttpStatusCode status, string description) => await SetStatusCodeAndDisposeAsync((int) status, description);
|
||||||
|
|
||||||
|
|
||||||
void IDisposable.Dispose() {
|
void IDisposable.Dispose() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user