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)); }
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); }
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; }