关于在asp.net webapi和HTTP谓词上实现API的问题

时间:2014-08-08 10:19:40

标签: http asp.net-web-api

我正在使用ASP.NET Web API创建api

我在存储库中有一个方法,可以将工作人员添加到公司。 这是方法:

public void AddToCompanyBy(Guid workerId, Guid companyId)
{
  var worker = GetById(workerId);
  var company = DbContext.Set<Company>().Find(companyId);

  if (worker == null)
    throw new Exception("This worker does not exist");
  if (company == null)
    throw new Exception("This company does not exist");

  company.Workers.Add(worker);
}

我有一个调用此方法的ApiController动作。 这是这个动作:

public IHttpActionResult AddToCompany(Guid workerId, Guid companyId)
{
  try
  {
    UoW.Workers.AddToCompanyBy(workerId, companyId);
    return Ok();
  }
  catch (Exception ex)
  {
    return BadRequest();
  }
}

所以我的问题是: 我是否正确地将响应返回为好或者我必须选择其他类型的响应? 我还应该退回实体吗? 如何标记动作(PUT或PATCH或GET)?

1 个答案:

答案 0 :(得分:1)

  • 我是正确的回复回复,或者我必须选择其他类型的回复

可以返回OK响应。由于Content Negotiation in Web API,您不应该指定返回类型。

  • 我是否还应该返回实体?

这取决于您的API以及API的消费者希望获得的结果。如果仅仅知道一切都正确就足够了,你可以留下好消息。如果他们需要您的服务器生成的某些数据,对于例如增加的ID,您应该返回此数据甚至是完整实体。

  • 如何标记动作(PUT或PATCH或GET)?

    [HttpPost]
            public IHttpActionResult AddToCompany(Guid workerId,Guid companyId)

    [HTTPGET]
            public IHttpActionResult AddToCompany(Guid workerId,Guid companyId)

根据评论更新:

  • 我的意思是在这种特殊情况下我应该选择哪个动词?

PUT和POST都可用于创建。当然,您不应该使用GET动词进行创建或更新。

一般Http动词规范:w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3

发布此讨论:stackoverflow.com/questions/630453/put-vs-post-in-rest