ASP.NET Core 3.xを使用してRESTful API P21を構築し、リソースを作成する
ブログパークの記事ID:
経験に基づいて、我々はやっている查询
、创建
、更新
、我々は異なる使用する必要がありDto类
、時間のほとんどは、彼らが同じのメンバーかもしれないが、ビジネスが変化して、異なる作成ものの、Dto
すぐに私たちを助けることができる利点クラスをある事業の復興。
次に、会社のリソースを作成するためのAPIの作成を開始します
[HttpPost]
public async Task<ActionResult<CompanyDto>> CreateCompany([FromBody]CompanyAddDto company)
{
//当请求的Body转换成CompanyAddDto失败时,company就会为null,(在.Net Core 3.x之前,
//因为早期版本是没有ApiController这个特性的)所以我们在此处应该判断一下,
//但是在.Net Core 3.x (添加[ApiController特性])之后,当请求的Body转换失败之后,.Net Core 3.x 会自动返回 400 状态码,所以下面的if判断可以不写.
if (company == null)
{
return BadRequest();
}
var entity = this._mapper.Map<Company>(company);
this._companyRepository.AddCompany(entity);
await this._companyRepository.SaveAsync();
//POST请求成功之后之后,我们应该返回201状态码
var returnDto = this._mapper.Map<CompanyDto>(entity);
//返回插入的资源
//第一个参数:返回可找到当前资源的URI
//第二个参数:路由的值
//第三个参数:返回的是响应的Body
return CreatedAtRoute(
nameof(GetCompany),
new{companyId = returnDto.Id},
returnDto);
}
上記のコードでCreatedAtRoute
は、メソッドの最初のパラメーターは、現在作成されているリソースのURIが指すアクションメソッドを返すため、次のように名前コードを指定する必要があります。
/// <summary>
/// 获取指定公司
/// </summary>
/// <param name="companyId">公司id</param>
/// <returns></returns>
[HttpGet("{companyId}",Name =nameof(GetCompany) )] //注意此处的Name属性
//[Route("{companyId}")] //使用这种方式也能表示路由,但是不常用
public async Task<ActionResult<Company>> GetCompany(Guid companyId)
会社のリソースを作成するためDto对象
のコードは次のとおりです。
/// <summary>
/// 创建公司的Dto对象
/// </summary>
public class CompanyAddDto
{
public string Name { get; set; }
public string Introduction { get; set; }
}
CompanyProfile.cs
次のようにクラス、エンティティとCompanyAddDtoとびコードとの関係を示すマッピングマップです。
/*
* CompanyAddDto(原对象),Company(目标对象)的映射
*/
CreateMap<CompanyAddDto,Company>();
コードの会社の部分を追加するために実装クラスを最適化します。
public void AddCompany(Company company)
{
if (company == null)
{
throw new ArgumentException(nameof(company));
}
company.Id = Guid.NewGuid();
if (company.Employees !=null)
{
foreach (var employee in company.Employees)
{
employee.Id = Guid.NewGuid();
}
}
this._content.Add(company);
//this._content.Companies.AddAsync(company);
}
会社のリソース作成インターフェースを呼び出します。
呼び出し結果:
返却されたハンドラー:
返されたヘッダーにすでに含まれていることがわかります。また、現在挿入されているリソースURI
ロケーションヘッダーを再度要求できます。http://localhost:5000/api/Companies/663b20a2-dadc-4502-a99d-57a26810530b
挿入結果は意図的にパラメーターなしで渡され、結果を返すことにより400ステータスコードが返され[ApiController]
ます。
- 上記のドキュメントは、自分で作成したリソースを参照しています