加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 创建IHttpActionResult以返回状态代码Accepted

发布时间:2020-12-15 22:02:01 所属栏目:百科 来源:网络整理
导读:我正在研究一个演示并找出如何最好地完成IHttpActionResults,就像我们创建的那样,ok,badrequest现在在web api 2中. [Route("demosite")] public IHttpActionResult PostCreateDemoSite(CreateDemoSiteModel model) { if (!ModelState.IsValid) return BadReq
我正在研究一个演示并找出如何最好地完成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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读