/// <inheritdoc cref="IBlogApiClient.GetStoriesAsync" /> public async Task <ListResult <StoryModel, ResourcesMetaInfo> > GetStoriesAsync(StoryIncludes flags) { var path = new Uri(baseUri, "stories"); var include = EnumFlags.ToQueryString(flags); var query = QueryString.Create(nameof(include), include); var requestUri = new UriBuilder(path) { Query = query.ToUriComponent() }.Uri; try { using (var response = await client.GetAsync(requestUri, CancellationToken.None)) { response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); var data = Json.Deserialize <ListResult <StoryModel, ResourcesMetaInfo> >(json); return(data); } } catch (HttpRequestException exception) { return(new ListResult <StoryModel, ResourcesMetaInfo>()); } }
public void Test3() { var include = EnumFlags.ToQueryString(TestFlags.Value1 | TestFlags.Value2); //var temp = EnumFlags.Parse<TestFlags>(new[] {"value-1", "Value3"}, StringComparer.InvariantCulture); Assert.IsNotNull(include); }
/// <inheritdoc cref="IBlogApiClient.GetStoriesAsync" /> public async Task <LandingModel> GetLandingAsync(LandingIncludes flags) { var path = new Uri(baseUri, "landing"); var include = EnumFlags.ToQueryString(flags); var query = QueryString.Create(nameof(include), include); var requestUri = new UriBuilder(path) { Query = query.ToUriComponent() }.Uri; try { if (null != authorizationToken) { client.SetBearerToken(authorizationToken.Token); } using (var response = await client.GetAsync(requestUri, CancellationToken.None)) { response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); var data = Json.Deserialize <LandingModel>(json); return(data); } } catch (HttpRequestException) { return(new LandingModel()); } }
public async Task <IActionResult> Get(string page, [FromCommaSeparatedQuery(Name = "include")] IEnumerable <string> includes) { var flags = EnumFlags.Parse <StoryIncludes>(includes); var query = new GetStoriesListQuery(User) { IncludeAuthors = StoryIncludes.Authors == (flags & StoryIncludes.Authors), IncludeComments = StoryIncludes.Comments == (flags & StoryIncludes.Comments), Cursor = (null != page && NavigationCursorEncoder.TryParse(page, out var cursor)) ? cursor : NavigationCursor.Forward(0, blogSettings.PageSize) }; var result = await mediator.Send(query, HttpContext.RequestAborted); if (false == result.IsSuccess()) { foreach (var exception in result.Exceptions) { logger.LogError(exception, "[StoriesController.Get]"); } return(BadRequest(result.Exceptions)); } var include = EnumFlags.ToQueryString(flags); string backward = null; string forward = null; if (null != result.Backward) { backward = Url.Action("Get", "Stories", new { page = NavigationCursorEncoder.ToEncodedString(result.Backward), include = include.ToString() }); } if (null != result.Forward) { forward = Url.Action("Get", "Stories", new { page = NavigationCursorEncoder.ToEncodedString(result.Forward), include = include.ToString() }); } return(Ok(new ListResult <StoryModel, ResourcesMetaInfo> { Data = result.Select(story => { var model = mapper.Map <StoryModel>(story); model.Author = result.Authors.FindIndex(story.Author); return model; }), Meta = new ResourcesMetaInfo { Resources = new AuthorsResource { Authors = result.Authors.Select(author => mapper.Map <AuthorModel>(author)) }, Navigation = new Navigation { Previous = backward, Next = forward } } })); } }