我正在研究一个演示并找出如何最好地完成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然后返回对象是否有意义
设置消费者可以要求的位置标题
状态(如创建状态代码).
>我该如何设置
对象的MediaTypeFormatter格式化器反映了什么
消费者在请求中请求.
>做这一切
从设计的角度来看感觉.
码:
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推荐:
The entity returned with this response SHOULD include an indication of the request’s current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。