private PrepareRusult PrepareMethod(HttpContext context, ApiController api, string methodName) { var result = new PrepareRusult(); MethodDescriptor method; if (!_apiDescriptor.MethodsDic.TryGetValue(methodName, out method)) { result.Response = new Response { code = ApiException.CODE_MISS_METHOD, reason = "方法不存在" }; return result; } result.MethodDescriptor = method; bool respVoid = method.ResponseParameterInfo.ParameterType == typeof(void); result.ResponseVoid = respVoid; if (respVoid) { result.Response = new Response(); } else { result.Response = (Response)Activator.CreateInstance(method.ResponseParam.Type); } var resp = result.Response; Identity user = null; if (IsDebug) { string uid = context.Request.QueryString["user"]; if (!string.IsNullOrEmpty(uid)) { user = new Identity(uid, "debug"); api.Authetication.SaveUser(context, user); } } if (user == null) user = api.Authetication.GetUser(context); if (user == null || !user.IsAuthenticated) { try { user = api.Authetication.VerifyUser(context); if (user != null) api.Authetication.SaveUser(context, user); } catch (Exception ex) { resp.code = ApiException.CODE_ERROR; resp.reason = "验证时发生未知错误"; api.InvokeUnhandledException(context, methodName, null, ex); if (ApiManager.IsDebug) resp.stacktrace = ex.Message + " " + ex.StackTrace; result.Response = resp; return result; } } if (method.NeedAuth && (user == null || !user.IsAuthenticated)) { resp.code = ApiException.CODE_UNAUTH; resp.reason = "没有权限"; result.Response = resp; result.Response.redirect = context.Response.RedirectLocation; return result; } if (user == null) { user = new Identity(); api.TempUser = user; } resp.User = user; result.Response = resp; return result; }
public virtual void SaveUser(System.Web.HttpContext context, Identity user) { context.Session.Add(SESSION_USER_KEY, user); }
public void InvokeReturnUser(HttpContext context, Identity user) { string retString = JsonConvert.SerializeObject(new Response { User = user }, Formatting.Indented); if (!string.IsNullOrEmpty(retString)) { context.Response.Write(retString); } }