zoukankan      html  css  js  c++  java
  • ASP.NET Core WebAPI学习-3

    1. ASP.NET Core WebAPI学习-1
    2. ASP.NET Core WebAPI学习-2
    3. ASP.NET Core WebAPI学习-3
    4. ASP.NET Core WebAPI学习-4
    5. ASP.NET Core WebAPI学习-5
    6. ASP.NET Core WebAPI学习-6

    内容协商(Content Negotiation) AutoMapper的使用

    内容协商是这样一个过程:针对一个响应,当有多种表述格式可用的时候,选取最佳的一个表述。数据格式是json,xml等格式
    Media Type(媒体类型):
    - applicaion/json
    - application/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

    1. 安装包:AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0
    2. 在Starup的ConfigureServices方法中中配置服务:
    services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
    
    1. 添加配置文件
    using AutoMapper;
    using Routine.Api.Dtos;
    using Routine.Api.Entity;
    
    namespace Routine.Api.Profiles
    {
        public class CompanyProfile : Profile
        {
            public CompanyProfile()
            {
                CreateMap<Company, CompanyDto>()
                    .ForMember(
                        destinationMember: dest => dest.CompanyName,
                        memberOptions: opt => opt.MapFrom(mapExpression: src => src.Name));
    
                CreateMap<CompanyAddDto, Company>();
    
            }
        }
    }
    
    
    1. 在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));
    }
    
    1. 使用AutoMapper:
    var companyDtos = mapper.Map<IEnumerable<CompanyDto>>(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

    header和Get几乎一样,但是不返回body,HEAD可以用来在资源的获取上

  • 相关阅读:
    「HDU3640」I,Zombie
    气温变化折线图/matplotlib中文显示
    基本折线图
    根据统计数据画直方图
    matplotlib直方图绘制(hist)
    豆瓣Top250电影数据爬取学习
    pd.set_option参数设置
    django安装
    字典公共键
    字典排序
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878831.html
Copyright © 2011-2022 走看看