ASP.NET Core 3.xを使用してRESTful API P21をビルドし、resources.mdを作成します

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]ます。

通話結果
通話結果

おすすめ

転載: www.cnblogs.com/HelloZyjS/p/12678771.html