コード例 #1
0
        public ApiResponse TopicReplies(int topicId)
        {
            var topic = _topicRepo.Get(topicId);

            if (topic == null)
            {
                return(ApiResponse.NoContent(HttpStatusCode.NotFound));
            }


            var replies = _replyRepo.All()
                          .Where(c => c.TopicId == topicId)
                          .OrderBy(c => c.CreatedAtUtc)
                          .Include(r => r.CreatedByUser)
                          .Include(r => r.CreatedByWeChatAccount)
                          .ToList()
                          .Select(r =>
                                  new ReplySummary
            {
                Id              = r.Id,
                TopicId         = topicId,
                MarkdownContent = r.Content,
                HtmlContent     = r.Content.MdToHtml(),
                Author          = new AuthorSummary
                {
                    Id          = r.CreatedByUser.Id,
                    DisplayName = r.CreatedByUser.DisplayName
                },
                CreatedAt = r.CreatedAtUtc
            })
                          .ToList();

            return(ApiResponse.ActionResult(replies));
        }
コード例 #2
0
        public ApiResponse ShowDetail(int id)
        {
            var topic = _topicRepo.All()
                        .Where(t => t.Id == id)
                        .Include(t => t.CreatedByUser)
                        .SingleOrDefault();

            if (topic == null)
            {
                return(ApiResponse.NoContent(HttpStatusCode.NotFound));
            }


            return(ApiResponse.ActionResult(new {
                Author = new AuthorSummary
                {
                    Id = topic.CreatedByUser.Id,
                    DisplayName = topic.CreatedByUser.DisplayName
                },
                CreatedAt = topic.CreatedAtUtc,
                Title = topic.Title,
                MarkdownContent = topic.Content,
                HtmlContent = topic.Content.MdToHtml(),
                ViewCount = topic.ViewCount,
                ReplyCount = topic.ReplyCount
            }));
        }
コード例 #3
0
ファイル: UserController.cs プロジェクト: bq1028/dotnetclub
        public async Task <ApiResponse> GetChatyBotInfo()
        {
            var statusResponse = await _chatyApiService.GetChatyBotStatus();

            return(statusResponse == null
                ? ApiResponse.NoContent(HttpStatusCode.InternalServerError)
                : ApiResponse.ActionResult(statusResponse));
        }
コード例 #4
0
        public ApiResponse GetSettings()
        {
            var settings = _settingsRepo.All().FirstOrDefault();

            if (settings == null)
            {
                return(ApiResponse.NoContent());
            }

            return(ApiResponse.ActionResult(settings));
        }
コード例 #5
0
        public async Task <ApiResponse> UploadFile(IFormFile file, string category)
        {
            var preventedFileNameChars = new[] { '|', '\\', '?', '*', '<', '>', ':', '"', '\'' };

            if (string.IsNullOrEmpty(category) ||
                preventedFileNameChars.Any(category.Contains) ||
                file == null || file.Length < 1)
            {
                _logger.LogWarning("上传文件失败:空文件,或不正确的参数");
                return(ApiResponse.NoContent(HttpStatusCode.BadRequest));
            }

            category = category.Replace("/", _fileSystem.GetDirectorySeparatorChar());
            var subPath = string.Concat(category,
                                        _fileSystem.GetDirectorySeparatorChar(),
                                        Guid.NewGuid().ToString("N"));

            var storageFile = await _fileSystem.CreateFileAsync(subPath);

            using (var outputStream = await storageFile.OpenWriteAsync())
            {
                await file.CopyToAsync(outputStream);
            }


            var fileRecord = new FileRecord
            {
                UploadedBy   = HttpContext.DiscussionUser().Id,
                Size         = file.Length,
                OriginalName = file.FileName,
                StoragePath  = subPath,
                Category     = category,
                Slug         = Guid.NewGuid().ToString("N")
            };

            _fileRepo.Save(fileRecord);


            // ReSharper disable Mvc.ActionNotResolved
            // ReSharper disable Mvc.ControllerNotResolved
            var fileUrl = _fileSystem.SupportGeneratingPublicUrl
                ? await storageFile.GetPublicUrlAsync(TimeSpan.MaxValue)
                : Url.Action("DownloadFile", "Common", new { slug = fileRecord.Slug }, Request.Scheme);

            _logger.LogInformation("上传文件成功:{@UploadedFile}", new { fileRecord.OriginalName, fileRecord.Size, fileRecord.StoragePath, fileRecord.Id });
            return(ApiResponse.ActionResult(new
            {
                FileId = fileRecord.Id,
                PublicUrl = fileUrl,
            }));
        }
コード例 #6
0
        public async Task <ApiResponse> GetWeChatSessionList()
        {
            var user          = HttpContext.DiscussionUser();
            var weChatAccount = _wechatAccountRepo.All().FirstOrDefault(wxa => wxa.UserId == user.Id);

            if (weChatAccount == null)
            {
                _logger.LogWarning("加载对话列表失败:{@ImportAttempt}", new { UserId = user.Id, user.UserName, Result = "未绑定微信号" });
                return(ApiResponse.NoContent(HttpStatusCode.BadRequest));
            }

            var messageList = await _chatyApiService.GetMessageList(weChatAccount.WxId);

            return(messageList == null
                ? ApiResponse.NoContent(HttpStatusCode.InternalServerError)
                : ApiResponse.ActionResult(messageList));
        }
コード例 #7
0
 public ApiResponse ApiObj()
 {
     return(ApiResponse.ActionResult(new { field = "foo" }));
 }