在.net核心WebAPI中,您使用此方法返回201代码,这表示已创建对象。
[Microsoft.AspNetCore.Mvc.NonAction]
public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute (string routeName, object routeValues, object content);
如上所示,CreatedAtRoute可以接收3个参数:
routeName
是必须放在方法上的名称,该名称将是创建后将获得该资源的URI。
routeValues
这是包含将在指定的路由处传递给GET方法的值的对象。它将用于返回创建的对象
内容
是创建的对象。
上面的示例显示了使用带绑定名称的简单GET方法和创建新对象的POST方法的简单控制器的两种方法的实现。
namespace BastterAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CompanyController : Controller
{
private ICompanyRepository _companyRepository;
public CompanyController(ICompanyRepository companyRepository)
{
_companyRepository = companyRepository;
}
[HttpGet("{id}", Name="GetCompany")]
public IActionResult GetById(int id)
{
Company company = _companyRepository.Find(id);
if (company == null)
{
return NotFound();
}
return new ObjectResult(company);
}
[HttpPost]
public IActionResult Create([FromBody] Company company)
{
if (company == null)
{
return BadRequest();
}
_companyRepository.Add(company);
return CreatedAtRoute("GetCompany", new Company { CompanyID = company.CompanyID }, company);
}
}
}
重要
请注意,CreatedAtRoute(routeName)上的第一个参数必须与Get方法的Name定义相同。
第二个参数上的对象将需要具有用于获取Get方法上的资源所必需的字段,可以说这是自身创建的对象的子集
最后一个参数是在正文请求中以完整格式收到的公司对象。
最终
最终结果是,当创建新公司的邮政使用此API时,您将返回诸如“ api / company / {id}”之类的路由,该路由将返回给您新创建的资源