static async Task StandardRequestHandlerAsync(HttpRequest request, HttpResponse response, RouteData routeData, HttpResultStandardRequestAsyncCallback callback) { WebMethods method = request.Method._ParseEnum(WebMethods.GET); CancellationToken cancel = request._GetRequestCancellationToken(); ConnectionInfo connInfo = request.HttpContext.Connection; IPEndPoint remote = new IPEndPoint(connInfo.RemoteIpAddress._UnmapIPv4(), connInfo.RemotePort); IPEndPoint local = new IPEndPoint(connInfo.LocalIpAddress._UnmapIPv4(), connInfo.LocalPort); string pathAndQueryString = request._GetRequestPathAndQueryString(); pathAndQueryString._ParseUrl(out Uri uri, out QueryStringList qs); try { using (HttpResult result = await callback(method, uri.LocalPath, qs, routeData, local, remote, cancel)) { await response._SendHttpResultAsync(result, cancel); } } catch (Exception ex) { ex._Error(); HttpResult errResult = new HttpStringResult("Error: " + ex.Message, statusCode: Consts.HttpStatusCodes.InternalServerError); await response._SendHttpResultAsync(errResult, cancel); } }
public static async Task SendAuthenticateHeaderAsync(HttpResponse response, string realm, CancellationToken cancel = default) { KeyValueList <string, string> basicAuthResponseHeaders = new KeyValueList <string, string>(); basicAuthResponseHeaders.Add(Consts.HttpHeaders.WWWAuthenticate, $"Basic realm=\"{realm}\""); await using var basicAuthRequireResult = new HttpStringResult("Basic Auth Required", contentType: Consts.MimeTypes.TextUtf8, statusCode: Consts.HttpStatusCodes.Unauthorized, additionalHeaders: basicAuthResponseHeaders); await response._SendHttpResultAsync(basicAuthRequireResult, cancel : cancel); }
public void AddToRouteBuilder(RouteBuilder rb, bool showDetailError) { this.IsSealed = true; foreach (var act in List) { foreach (var method in act.Methods._GetWebMethodListFromBits()) { rb.MapVerb(method.ToString(), act.Template, async(request, response, routeData) => { CgiContext ctx = new CgiContext(request, routeData, request._GetRequestCancellationToken()); try { HttpResult result = await act.ActionAsync(ctx); await response._SendHttpResultAsync(result, ctx.Cancel); } catch (Exception ex) { ex = ex._GetSingleException(); ex._Error(); string errorStr; if (showDetailError == false) { errorStr = ex.Message; } else { errorStr = ex.ToString(); } var errorResult = new HttpStringResult($"HTTP Status Code: 500\r\n" + errorStr, statusCode: 500); await response._SendHttpResultAsync(errorResult, ctx.Cancel); } }); } } }
static async Task StandardRequestHandlerAsync(HttpContext context, HttpResultStandardRequestAsyncCallback callback) { var box = new HttpEasyContextBox(context); try { await using (HttpResult result = await callback(box.Method, box.PathAndQueryStringUri.LocalPath, box.QueryStringList, context, box.RouteData, box.LocalEndpoint, box.RemoteEndpoint, box.Cancel)) { await box.Response._SendHttpResultAsync(result, box.Cancel); } } catch (Exception ex) { ex._Error(); await using HttpResult errResult = new HttpStringResult("Error: " + ex.Message, statusCode: Consts.HttpStatusCodes.InternalServerError); await box.Response._SendHttpResultAsync(errResult, box.Cancel); } }
public static async Task EasyRequestHandler(HttpContext context, object?param, Func <HttpEasyContextBox, object?, Task <HttpResult> > callback) { var box = context._GetHttpEasyContextBox(); try { await using (HttpResult result = await callback(box, param)) { await box.Response._SendHttpResultAsync(result, box.Cancel); } } catch (Exception ex) { ex._Error(); await using HttpResult errResult = new HttpStringResult("Error: " + ex.Message, statusCode: Consts.HttpStatusCodes.InternalServerError); await box.Response._SendHttpResultAsync(errResult, box.Cancel); } }