微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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然后返回对象是否有意义
设置消费者可以要求的位置标题
状态(如创建状态代码).
>我该如何设置
对象的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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐