Beispiel #1
0
        protected virtual void ProcessRequestData(HttpRequest req, RouteItem router, HttpRequestData requestData)
        {
            var method = req.Method.ToLower();

            requestData.ServiceId = router.ServiceId;
            requestData.MessageId = router.MessageId;

            CollectQuery(req.Query, requestData.QueryOrFormData);
            string contentType = "";

            if (method == "post" || method == "put")
            {
                if (!string.IsNullOrEmpty(req.ContentType))
                {
                    contentType = req.ContentType.ToLower().Split(';')[0];
                }
            }

            if (contentType == "application/x-www-form-urlencoded" || contentType == "multipart/form-data")
            {
                CollectForm(req.Form, requestData.QueryOrFormData);
            }
            else if (contentType == "application/json")
            {
                requestData.RawBody = CollectBody(req.Body);
            }
        }
Beispiel #2
0
        private void AddHttpServiceRouter(Type type, MethodInfo m, RpcServiceAttribute sAttr, RpcMethodAttribute mAttr,
                                          RouterAttribute rAttr, HttpRouteOptions options)
        {
            var item = new RouteItem
            {
                Path         = rAttr.Path,
                AcceptVerb   = rAttr.AcceptVerb,
                Category     = rAttr.Category,
                InvokeMethod = m,
                MessageId    = mAttr.MessageId,
                ServiceId    = sAttr.ServiceId
            };

            //special MessageId;
            var args = new object[] { this.specialMessageId };

            item.InvokeService = this._proxyCreate.MakeGenericMethod(type).Invoke(this._proxy, args);

            if (rAttr.PluginType != null)
            {
                item.Plugin = ActivatorUtilities.CreateInstance(this._provider, rAttr.PluginType) as IHttpPlugin;
            }
            options.Items.Add(item);

            _logger.LogDebug("url:{0},verb:{1},service:{2},method:{3}",
                             item.Path, item.AcceptVerb, type.Name.Split('.').Last(), m.Name);
        }
Beispiel #3
0
        private async Task <bool> ParseRequestAsync(HttpRequest req, HttpResponse res, HttpRequestData requestData, RouteItem router)
        {
            bool             result = false;
            IHttpParsePlugin plugin = null;

            if (router.Plugin is IHttpParsePlugin parsePlugin)
            {
                plugin = parsePlugin;
            }

            requestData.MessageId = router.MessageId;
            requestData.ServiceId = router.ServiceId;

            if (plugin != null)
            {
                result = await plugin.ParseAsync(req, res, requestData, router);

                CollectCommonData(req, requestData.QueryOrFormData);
                return(result);
            }


            try
            {
                ProcessRequestData(req, router, requestData);
                CollectCommonData(req, requestData.QueryOrFormData);
            }
            catch (Exception ex)
            {
                res.StatusCode = (int)HttpStatusCode.InternalServerError;
                await res.WriteAsync("InternalServerError:" + ex.Message);

                _logger.LogError(ex, "cast http request to rpc error");
                return(true);
            }


            return(result);
        }
Beispiel #4
0
        protected virtual async Task <bool> BeforeAsyncCall(HttpRequest req, HttpResponse res, HttpRequestData requestData, RouteItem routeItem)
        {
            if (_parsers != null)
            {
                foreach (var parser in this._parsers)
                {
                    var ret = await parser.ParseAsync(req, res, requestData, routeItem);

                    if (ret)
                    {
                        return(ret);
                    }
                }
            }

            return(false);
        }
Beispiel #5
0
        private async Task <bool> ProcessOutput(HttpRequest req, HttpResponse res, RouteItem routeItem, object retVal)
        {
            var resMsg = await GetJsonResult(retVal);

            SetContentType(req, res, resMsg);


            //输出前置处理
            if (routeItem.Plugin is IHttpPostProcessPlugin postPlugin)
            {
                var ret = await postPlugin.PostProcessAsync(req, res, resMsg, routeItem);

                if (ret)
                {
                    return(ret);
                }
            }

            if (routeItem.Plugin is IHttpOutputPlugin outputPlugin)
            {
                var ret = await outputPlugin.OutputAsync(req, res, resMsg, routeItem);

                return(ret);
            }

            //response
            await res.WriteAsync("{\"");

            await res.WriteAsync(this._gatewayOptions.WrapperCodeFieldName);

            await res.WriteAsync("\":");

            await res.WriteAsync(resMsg.Code.ToString());

            await res.WriteAsync(",\"");

            await res.WriteAsync(this._gatewayOptions.WrapperMessageFieldName);

            await res.WriteAsync("\":\"");

            if (!string.IsNullOrEmpty(resMsg.Message))
            {
                await res.WriteAsync(resMsg.Message.Replace("\n", "\\n"));
            }
            else
            {
                await res.WriteAsync("");
            }

            await res.WriteAsync("\"");

            if (resMsg.Data != null)
            {
                string dataJson = this._jsonParser.ToJson(resMsg.Data);
                await res.WriteAsync(",\"");

                await res.WriteAsync(this._gatewayOptions.WrapperDataFieldName);

                await res.WriteAsync("\":");

                await res.WriteAsync(dataJson);
            }
            else
            {
                await res.WriteAsync(",\"");

                await res.WriteAsync(this._gatewayOptions.WrapperDataFieldName);

                await res.WriteAsync("\":{}");
            }
            await res.WriteAsync("}");

            return(true);
        }
Beispiel #6
0
        private async Task <bool> ParsePostRequestAsync(HttpRequest req, HttpResponse res, RouteItem router, HttpRequestData requestData)
        {
            bool result = false;
            IHttpPostParsePlugin plugin = null;

            if (router.Plugin != null && router.Plugin is IHttpPostParsePlugin)
            {
                plugin = router.Plugin as IHttpPostParsePlugin;
            }

            if (plugin != null)
            {
                result = await plugin.PostParseAsync(req, res, requestData, router);

                return(result);
            }

            return(result);
        }