ASP.NET Core WebAPI学習-3

3659 ワード

  • ASP.NET Core WebAPI学習-1
  • ASP.NET Core WebAPI学習-2
  • ASP.NET Core WebAPI学習-3
  • ASP.NET Core WebAPI学習-4
  • ASP.NET Core WebAPI学習-5
  • ASP.NET Core WebAPI学習-6
  • Content Negotiation AutoMapperの使用


    コンテンツ交渉は、1つの応答に対して、複数の記述フォーマットが使用可能である場合に、最適な記述を選択するプロセスです.データ形式はjson、xml等の形式Media Type:-アプリケーション/json-アプリケーション/xml出力形式はStartup.csで定義、要求されたフォーマットが出力フォーマットと一致しない場合、406 Not AcceptableステータスコードがASPに戻る.NET CoreのStartupのConfigureServicesメソッドでは、次のように定義されています.
    services.AddControllers(configure: setup =>
                            {
                                setup.ReturnHttpNotAcceptable = true;
                                //     json,   json
                                setup.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
                                //          xml
                                //setup.OutputFormatters.Insert(index:0,new XmlDataContractSerializerOutputFormatter());
                            });
    

    WebAPIでActionResultを使用する場合、swashbuckleの場合、注釈がより明確になり、できるだけActionResultを使用することができます

    AutoMapperの使用

  • インストールパッケージ:AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0
  • StarupのConfigureServicesメソッドでのサービスの構成:
  • services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
    
  • プロファイル
  • を追加
    using AutoMapper;
    using Routine.Api.Dtos;
    using Routine.Api.Entity;
    
    namespace Routine.Api.Profiles
    {
        public class CompanyProfile : Profile
        {
            public CompanyProfile()
            {
                CreateMap()
                    .ForMember(
                        destinationMember: dest => dest.CompanyName,
                        memberOptions: opt => opt.MapFrom(mapExpression: src => src.Name));
    
                CreateMap();
    
            }
        }
    }
    
    
  • Controllerのコンストラクション関数にAutoMappeサービス
  • を注入する
    private readonly ICompanyRepository companyRepository;
    private readonly IMapper mapper;
    public CompaniesController(ICompanyRepository companyRepository, IMapper mapper)
    {
        this.companyRepository = companyRepository ??
            throw new ArgumentNullException(nameof(companyRepository));
        this.mapper = mapper ??
            throw new ArgumentNullException(nameof(mapper));
    }
    
  • AutoMapperを使用する:
  • var companyDtos = mapper.Map>(companies);
    

    カスタムエラー情報


    ASP.NET Core WebAPI内蔵apiは、サービス側で実行エラーが発生した場合、Development環境で詳細エラー情報が報告され、Production環境では500ステータスコードが返され、body内には何の情報もなくStartup.csのConfigureメソッドでの構成:
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler(appBuilder =>
                                    {
                                        appBuilder.Run(handler: async context =>
                                                       {
                                                           context.Response.StatusCode = 500;
                                                           await context.Response.WriteAsync(text: "Unexpected Error!");
                                                       });
                                    });
        }
    
        app.UseRouting();
    
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
                         {
                             endpoints.MapControllers();
                         });
    }
    

    Http Head


    ヘッダーはGetとほぼ同じですが、bodyを返さず、HEADはリソースの取得に使用できます.