示例#1
0
        public async Task RouteAsync(RouteContext context)
        {
            AshxRouteData _routeData = AshxBuilder.Filter(context);

            if (AshxBuilder.Options.IsAsync)
            {
                await Task.Run(() => IHttpHandlerAshxExecute(_routeData));
            }
            else
            {
                await IHttpHandlerAshxExecute(_routeData);
            }

            //HttpContextExtension.Current
            //context.Handler
            //return Task.Run(() =>
            //{
            //    AshxRouteData ashxRoute = new AshxRouteData(context);

            //    ashxRoute.Handler = async (HttpContext i) =>
            //    {
            //        i.Response.ContentType = "text/html;charset=utf-8;";
            //        HttpContextExtension.Current.Response.Write("我是由注入获取的Current\n\t");

            //        i.Response.Write("Hello World! 我是Ashx.Core,由逆血提供技术支持!");
            //        await Task.CompletedTask;
            //    };

            //    //context.HttpContext.Abort();
            //    //context.HttpContext.Response.Body.Write(Encoding.UTF8.GetBytes("我是你爹"));
            //    //return Task.CompletedTask;
            //});
            //throw new NotImplementedException();
        }
示例#2
0
        /// <summary>
        /// (默认是内部调用)调用此方法,可以对 当前路由的信息 Application_Start() 方法中调用 AshxRegistration.RegisterAllAreas();
        /// </summary>
        internal Task IHttpHandlerAshxExecute(AshxRouteData _routeData)
        {
            string key = _routeData.Controller; ////string text = requestContext.RouteData.GetRequiredString("controller");$"{Registration.Segment}{text}";

            if (AshxBuilder.RouteDefaults.TryGetValue(key, out AshxExtension extension))
            {
                if (_routeData.Area != string.Empty && !_routeData.Area.Equals(extension.AshxType.Namespace))
                {
                    throw _routeData.HttpContext.AddHttpException(404, string.Format(System.Globalization.CultureInfo.CurrentCulture, "找不到该路由的控制器:“{0}” ,URL: {1}", new object[] { key, _routeData.HttpContext.Request.Path }));
                }

                Ashx ashx;
                void isMethod()
                {
                    if (extension.IsMethod(_routeData.Action, out ashx))
                    {
                        _routeData.GetAshx = ashx;
                        //SessionStateBehavior sessionState = (SessionStateBehavior)(int)ashx.IsSession;//Enum.Parse(typeof(SessionStateBehavior),);
                        //requestContext.HttpContext.SetSessionStateBehavior(sessionState);
                    }
                    else
                    {
                        _routeData.IsAshx = false;
                        //requestContext.HttpContext.SetSessionStateBehavior(SessionStateBehavior.Disabled);

                        //在控制器“TaskApi”上未找到可执行方法“SellerInf
                        throw _routeData.HttpContext.AddHttpException(404, string.Format(System.Globalization.CultureInfo.CurrentCulture, "在控制器“{0}”上未找到可执行方法“{1}”,URL: {2}", new object[] { key, _routeData.Action, _routeData.HttpContext.Request.Path }));
                    }
                }

                isMethod();

                _routeData.SetKey();

                bool isOptions()
                {
                    if (AshxExtension.CrossDomain(_routeData.HttpContext.Response, _routeData.GetAshx) && _routeData.HttpContext.Request.Method.EqualsNotCase("OPTIONS"))
                    {
                        _routeData.Handler = async(_) => await Task.CompletedTask;
                        Info(_routeData);
                        return(true);
                    }
                    return(false);
                }

                if (isOptions())
                {
                    return(Task.CompletedTask);
                }

                if (!AshxExtension.HttpMethod(_routeData.HttpContext.Request.Method, ashx.State))
                {
                    _routeData.Handler = async(HttpContext i) => await AshxHandlerOrAsync.CustomOutput(i, "application/json", "请求类型错误!", 403);

                    return(Task.CompletedTask);
                }

                if (extension.IsMin)
                {
                    Task minapi()
                    {
                        IMinHttpAsynApi handler = extension.MinHttpAsynApi;

                        if (AshxHandlerOrAsync.MinInitialize(handler, _routeData))
                        {
                            if (AshxHandlerOrAsync.GetMinObj(_routeData, out object[] _objs))
                            {
                                _routeData.Handler = async(HttpContext i) => await AshxHandlerOrAsync.CustomOutput(i, "application/json", "框架错误,请查看日志文件!", 500);

                                return(Task.CompletedTask);
                            }

                            Info(_routeData);

                            if (ashx.IsTask)
                            {
                                //AshxAsyncHandler ashxAsync = new AshxAsyncHandler(handler as IHttpAsynApi, _routeData);
                                _routeData.Handler = async(HttpContext i) => await AshxHandlerOrAsync.StartMinAsyncAshx(handler, _routeData, _objs);

                                //return Task.CompletedTask;
                            }
                            else
                            {
                                //AshxHandler ashxHandler = new AshxHandler(handler as IHttpApi, _routeData);
                                _routeData.Handler = async(HttpContext i) => await AshxHandlerOrAsync.StartMinAshx(handler, _routeData, _objs);
                            }

                            return(Task.CompletedTask);
                        }
                        else
                        {
                            //因用户取消逻辑
                            _routeData.Handler = async(HttpContext i) => await Task.CompletedTask;
                            return(Task.CompletedTask);
                        }
                    }

                    return(minapi());
                }