gpt4 book ai didi

c# - 创建 IHttpActionResult 以返回已接受的状态代码

转载 作者:行者123 更新时间:2023-11-30 12:45:57 25 4
gpt4 key购买 nike

我正在做一个演示,并弄清楚如何以与我们创建时相同的方式最好地执行 IHttpActionResults,好的,现在在 Web API 2 中使用 badrequest。

    [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 以简化 future 的操作。

我想了解一下这个想法是否合理,我的做法是否合理,如果不合理,如何改进。

我的实现可以在下面找到,这是我的问题:

  1. 返回一个带有任务 ID 的对象是否有意义,然后为消费者可以要求的位置设置位置 header 状态(如 Created 状态代码)。
  2. 我该如何设置对象的 MediaTypeFormatter 格式化程序,它反射(reflect)了什么消费者在请求中要求。
  3. 做这一切从设计的角度来看。

代码:

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 site 类型的资源,并且通过返回提供相关任务状态的端点地址,您遵守 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.

关于c# - 创建 IHttpActionResult 以返回已接受的状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22073146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com