c# – 创建IHttpActionResult以返回状态代码Accepted
我正在研究一个演示并找出如何最好地完成IHttpActionResults,就像我们创建的那样,ok,badrequest现在在web api 2中.
[Route("demosite")] public IHttpActionResult PostCreateDemoSite(CreateDemoSiteModel model) { if (!ModelState.IsValid) return BadRequest(ModelState); var identity = CreateDemoSiteIdentity(model); Request.GetOwinContext().Authentication.SignIn(identity); var taskId = Guid.NewGuid(); _provider.SendMessageAsync(new CreateDemoSite{ TaskId = taskId,Name =model.Name,UserId = model.Email); _provider.SendMessageAsync( new UserFeedbackMessage { UserId = model.Email,JsonSerializedMessage = JsonConvert.SerializeObject(new { message ="Your site is beging created."}) }); return new ProcessingContentResult(this.Request,Guid.NewGuid ); } 我的应用程序将使用这种方法很多,一些作业/任务被发布,消费者将被接受,并将不得不去一些其他端点来获得他的工作状态.因此,我想创建一个IHttpActionResult,以便将来更简单. 我希望得到一些观点,如果这个想法是合理的,如果它是有意义的我做了它,如果没有,如何改进. 我的实现可以在下面找到,这是我的问题: >使用任务Id然后返回对象是否有意义 码: public class ProcessingTask { public Guid Id { get; set; } } public class ProcessingContentResult : IHttpActionResult { HttpRequestMessage _request; Guid _id; public ProcessingContentResult(HttpRequestMessage request,Guid id) { _id = id; _request = request; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { HttpResponseMessage message = _request.CreateResponse(HttpStatusCode.Accepted,new ProcessingTask { Id = Guid.NewGuid() }); try { message.Headers.Location = new Uri("path_to_status_endpoint"); message.RequestMessage = _request; } catch { message.Dispose(); throw; } return Task.FromResult(message); } } 解决方法
是的,这是有道理的.即使从RESTful服务架构的角度来看,这也是一种合理的设计 – 使用您概述的操作,客户端通过向特定URI发出POST并返回端点的地址来提供您所遵循的相关任务的状态,从而创建Demo站点类型的资源.到
RFC推荐:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |