/// <summary> /// /// </summary> /// <param name="actionContext"></param> public override void OnActionExecuting(HttpActionContext actionContext) { ServiceContainer.Resolve <IInitRequestScopeContext>().BeginRequest(actionContext.Request); if (!actionContext.HasMarkerAttribute <NonTracingAttribute>()) { var request = actionContext.Request; IRequestModel <Header> reqModel = null; Header reqHeader = null; if (actionContext.ActionArguments.Count > 0) { foreach (var dic in actionContext.ActionArguments) { //if (dic.Value is RequestModel) //{ // reqModel = dic.Value as RequestModel; // break; //} reqModel = dic.Value as IRequestModel <Header>; if (reqModel != null) { break; } } } if (reqModel == null && actionContext.Request.Content != null && string.Equals(actionContext.Request.Method.Method, "post", StringComparison.CurrentCultureIgnoreCase)) { try { reqModel = actionContext.Request.Content.ReadAsAsync <RequestModel>().Result; } catch { } if (reqModel != null) { actionContext.ActionArguments.Add(Guid.NewGuid().ToString("N"), reqModel); } } if (reqModel != null && reqModel.Header != null) { reqHeader = reqModel.Header; if (string.IsNullOrWhiteSpace(reqHeader.TraceID)) { reqHeader.TraceID = Generate.GenerateId();// Util.GetUniqueCode32(); } if (string.IsNullOrWhiteSpace(reqHeader.RpcID)) { reqHeader.RpcID = "0"; } //HttpContentData.SetTrackID(reqHeader.TraceID); //HttpContentData.SubRpcID = reqHeader.RpcID + ".0"; //var header = HttpContentData.CloneRequestHeader(reqModel.Header); //header.RpcID = header.RpcID + ".0"; } else { reqHeader = TracingContextData.GetDefaultRequestHeader(); //HttpContentData.SetTrackID(reqHeader.TraceID); } TracingContextData.SetSubRpcID(reqHeader.RpcID + ".0"); TracingContextData.SetRequestHeader(reqHeader); //HttpContentData.RequestHeader = reqHeader; //Not To Log if (!actionContext.HasMarkerAttribute <NotToLogAttribute>()) { TraceLogs trace = new TraceLogs(); trace.ContextType = ContextType.Server.ToString(); trace.StartTime = DateTime.Now; trace.MachineAddr = Util.TracingContextHelper.GetServerAddress(); trace.TraceId = reqHeader.TraceID; trace.RpcId = reqHeader.RpcID; trace.Protocol = string.Format("{0}/{1}", actionContext.Request.RequestUri.Scheme, actionContext.Request.Version); trace.Environment = this.environment ?? EnvironmentConfig.Environment; trace.SystemID = this.systemID ?? EnvironmentConfig.SystemID; trace.SystemName = this.systemName ?? EnvironmentConfig.SystemName; //InvokeID trace.InvokeID = request.RequestUri.AbsolutePath; IEnumerable <string> folder; if (actionContext.Request.Headers.TryGetValues(Config.ResponseHeaderFolderKey, out folder)) { trace.ServerHost = actionContext.Request.RequestUri.Host + folder.FirstOrDefault(); } else { trace.ServerHost = actionContext.Request.RequestUri.Host; } //SearchKey var searchKey = reqModel as ISearchKey; if (searchKey != null) { trace.SearchKey = searchKey.GetSearchKey(); } TraceExtensionOnActionExecuting(actionContext, trace); //srs.InvokeID = string.Format("{0}_{1}", actionContext.ControllerContext.ControllerDescriptor.ControllerName.ToLower(), actionContext.ActionDescriptor.ActionName.ToLower()); //if (actionContext.ActionArguments != null && actionContext.ActionArguments.Count > 0) //{ // srs.Extension.Add(Config.ParamsKey, actionContext.ActionArguments); //} //ServerRS Log Data TODO Util.TracingContextHelper.SetContextItem(Config.ServerRSKey, trace); } } base.OnActionExecuting(actionContext); }