Example #1
0
        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);
 }
Example #3
0
        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);
            }
        }