// GET: User public ActionResult Index() { try { // 使用 Request 和 Response 初始化登录服务 LoginService loginService = new LoginService(Request, Response); // 调用检查登录接口,成功后可以获得用户信息,进行正常的业务请求 UserInfo userInfo = loginService.Check(); Response.AddHeader("Content-Type", "application/json"); // 获取会话成功,需要返回 HTTP 视图,这里作为示例返回了获得的用户信息 return(Content(JsonConvert.SerializeObject(new { code = 0, message = "OK", data = new { userInfo } }))); } catch (Exception error) { // 可以处理登录失败的情况,但是注意此时无需返回 ActionResult, // 因为登录失败的时候,登录服务已经输出登录失败的响应 Debug.WriteLine(error); return(null); } }
public void TestCheck() { var mock = helper.CreateCheckHttpMock("valid-id", "valid-key"); LoginService service = new LoginService(mock.Object.Request, mock.Object.Response); UserInfo userInfo = service.Check(); Assert.IsNotNull(userInfo); mock.Verify(x => x.Response.Write(It.IsAny <string>()), Times.Never()); }
/// <summary> /// 处理 WebSocket 信道 GET 请求 /// </summary> /// /// <remarks> /// GET 请求表示客户端请求进行信道连接,此时会向 SDK 申请信道连接地址,并且返回给客户端 /// 如果配置指定了要求登陆,还会调用登陆服务来校验登陆态并获得用户信息 /// </remarks> private void HandleGet(ITunnelHandler handler, TunnelHandleOptions options) { Configuration config = ConfigurationManager.CurrentConfiguration; Tunnel tunnel = null; UserInfo user = null; // 要求登录态,获取用户信息 if (options?.CheckLogin == true) { try { LoginService loginService = new LoginService(Request, Response); user = loginService.Check(); } catch { // 要求检查登录态的话,发生异常就结束了 return; } } // 申请 WebSocket 信道连接地址 TunnelAPI tunnelApi = new TunnelAPI(); try { tunnel = tunnelApi.RequestConnect(BuildReceiveUrl()); } catch (Exception e) { Response.WriteJson(new { error = e.Message }); throw e; } // 输出 URL 结果 Response.WriteJson(new { url = tunnel.ConnectUrl }); handler.OnTunnelRequest(tunnel, user); }
public ActionResult <bool> Post(string email) { try { List <User> users = Get(); bool test = _loginService.Check(email, users); //User hold = _userService.Create(user); if (test == false) { return(StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status406NotAcceptable)); } return(StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status202Accepted)); } catch (Exception e) { string message = e.Message; string stackTrace = e.StackTrace; return(StatusCode(Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError)); } }
private LoginServiceException TestCheckExpectError(string id, string skey, bool?expectInvalidSession = null) { var mock = helper.CreateCheckHttpMock(id, skey); var loginService = new LoginService(mock.Object.Request, mock.Object.Response); LoginServiceException errorShouldThrow = null; try { UserInfo userInfo = loginService.Check(); } catch (LoginServiceException error) { errorShouldThrow = error; } Func <string, bool> bodyMatch = (string body) => { Console.WriteLine("=======Response========"); Console.WriteLine(body); JObject result = JObject.Parse(body); if (!helper.CheckBodyHasMagicId(result)) { return(false); } if (expectInvalidSession == null) { return(true); } return(result["error"].Value <string>() == "ERR_INVALID_SESSION" ^ !expectInvalidSession.Value); }; mock.Verify(x => x.Response.Write(It.Is((string body) => bodyMatch(body))), Times.Once()); return(errorShouldThrow); }