Пример #1
0
        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);
            }
        }
Пример #2
0
    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);
    }
Пример #3
0
        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);
                        }
                    });
                }
            }
        }
Пример #4
0
    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);
        }
    }
Пример #5
0
    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);
        }
    }