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可以用来在资源的获取上

  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878831.html
Copyright © 2011-2022 走看看