Beispiel #1
0
        protected override IDictionary <string, object> GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            ThriftActionResult context = ThriftActionResult.GetThriftResult(controllerContext.HttpContext);

            //check if current request is thrift
            if (context != null && context.GetParameterValues != null)
            {
                Dictionary <string, object> parameterDictionary = new Dictionary <string, object>();
                context.GetParameterValues(context.Input, parameterDictionary);

                context.Parameters = parameterDictionary;

                Dictionary <string, object> MatchDict = new Dictionary <string, object>();
                //ignore case
                foreach (var pd in actionDescriptor.GetParameters())
                {
                    string key = pd.ParameterName.ToLower();
                    if (parameterDictionary.ContainsKey(key))
                    {
                        MatchDict.Add(pd.ParameterName, parameterDictionary[key]);
                    }
                }

                return(MatchDict);
            }

            return(base.GetParameterValues(controllerContext, actionDescriptor));
        }
Beispiel #2
0
        protected override ActionResult CreateActionResult(ControllerContext controllerContext, ActionDescriptor actionDescriptor, object actionReturnValue)
        {
            ThriftActionResult context = ThriftActionResult.GetThriftResult(controllerContext.HttpContext);

            //check if current request is thrift
            if (context != null && context.ProcessResult != null)
            {
                context.Result = actionReturnValue;
                return(context);
            }

            //默认使用JSON
            return(new JsonResult()
            {
                ContentType = "application/json", ContentEncoding = System.Text.Encoding.UTF8, Data = actionReturnValue, JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
            //return base.CreateActionResult(controllerContext, actionDescriptor, actionReturnValue);
        }
Beispiel #3
0
        protected override ActionDescriptor FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, string actionName)
        {
            string contentType = controllerContext.HttpContext.Request.ContentType;

            if (contentType.StartsWith(ThriftMimeType, StringComparison.InvariantCultureIgnoreCase))
            {
                var inputStream = GetThriftStream != null?GetThriftStream(controllerContext.HttpContext) : controllerContext.HttpContext.Request.InputStream;

                ThriftActionResult context = new ThriftActionResult();

                TTransport trans = new TStreamTransport(inputStream, controllerContext.HttpContext.Response.OutputStream);

                if (contentType.Equals(ThriftMimeTypeJson))
                {
                    context.Output = context.Input = new TJSONProtocol(trans);
                }
                else if (contentType.Equals(ThriftMimeTypeCompact))
                {
                    context.Output = context.Input = new TCompactProtocol(trans);
                }
                else
                {
                    context.Output = context.Input = new TBinaryProtocol(trans);
                }

                TMessage tmsg = context.Input.ReadMessageBegin();
                context.SeqID = tmsg.SeqID;
                context.GetParameterValues = ProcessRequestMap[tmsg.Name];
                context.ProcessResult      = ProcessResultMap[tmsg.Name];
                context.Name = tmsg.Name;
                actionName   = context.Name;

                ThriftActionResult.SetThriftResult(controllerContext.HttpContext, context);
            }

            return(base.FindAction(controllerContext, controllerDescriptor, actionName));
        }
 public static void SetThriftResult(HttpContextBase context, ThriftActionResult result)
 {
     context.Items[ThriftContextKey] = result;
 }