public ISession CreateSession(string sessionId) { try { // reserve a session id // this line will throw an exception if the id already exists _sessions.Add(sessionId, null); return _sessions[sessionId] = new DictionarySession(sessionId); } catch (ArgumentException e) { throw new InvalidOperationException(string.Format( @"DictionarySessionStore.CreateNew: Session Id #{0} already exists", sessionId), e); } }
private async Task <object> ActionInvoker() { var action = ApiActionFactory.Get(this, ActionName, ActionVersion); if (action == null) { return(ErrorResult(new ApiException(ExceptionCode.ApiNotFound))); } if (action.Obsolete != null && action.Obsolete.IsError) { return(ErrorResult(new ApiException(ExceptionCode.ApiObsolete, action.Obsolete.Message))); } ActionName = action.Name; ApiAction = action; //验证签名 if (action.HasFilter <SignAttribute>()) { var signer = new Signer(); if (_NoSign == false) { var ex = signer.CheckAsync(this); //验证签名返回错误消息 if (ex != null) //如果必须签名,则抛出异常 { return(ErrorResult(ex)); } } } //是否启动Session var sessionState = SessionState; if (sessionState == ApiSessionState.Auto) { sessionState = IsBrowser ? ApiSessionState.Enable : ApiSessionState.Disable; } switch (sessionState) { case ApiSessionState.Enable: Properties["SessionState"] = 1; var err = await OnInitSession(); if (err != null) { return(ErrorResult(err)); } break; case ApiSessionState.Disable: case ApiSessionState.Auto: default: Properties["SessionState"] = 0; Trace.WriteLine("本次请求禁用Session"); Session = new DictionarySession(); break; } //用户 if (!action.HasFilter <NoLoginAttribute>()) { //初始化用户 var task = OnInitUser(); var ex = task.IsNull() ? null : await task; if (ex != null) { return(ErrorResult(ex)); } } //解析Url参数 Exception parseError; var args = action.GetArguments(RequestValues, out parseError); if (parseError != null) { return(ErrorResult(parseError)); } //验证参数 //执行前 { var task = OnExecuting(action.Name); var r = await task; if (r != null) { Trace.WriteLine("Api.OnExecuting截断"); return(ProcessResult(r)); } } //前Filter { var r = await action.OnActionExecuting(this); if (r != null) { Trace.WriteLine("Filter.OnExecuting截断"); return(ProcessResult(r)); } } //执行Action var result = await ApiAction.TryRunTask(action.Execute(this, args)); {//后Filter var r = await action.OnActionExecuted(this, result); if (r != null) { Trace.WriteLine("Filter.OnExecuted截断"); return(ProcessResult(r)); } } {//执行后 var task = OnExecuted(action.Name, result); var r = await task; if (r == null) { return(ProcessResult(result)); } Trace.WriteLine("Api.OnExecuted截断"); return(ProcessResult(r)); } }