WebAPI开发和调用

发布时间 2023-08-01 15:47:36作者: 恋上微笑的天使

WebAPI开发和调用(入门级别)

视频教程地址:

https://www.bilibili.com/video/BV11E411n74a
GitHub源码:
https://github.com/BobinYang/NetCoreWebAPI_Demo/
教程:
1、接口样例

{
"ISBN": "2",
"name": "1",
"price": "1",
"date": "20200219",
"authors": [
    {
        "name": "Jerry",
        "sex": "M",
        "birthday": "18888515"
    },
    {
        "name": "Tom",
        "sex": "M",
        "birthday": "18440101"
    }
    ]
}

2、服务端:
新建一个目录:BookManage
创建一个WebAPI项目:
https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-new

Controller :

[ApiController]
[Route("book/[controller]")]
public class ValuesController : ControllerBase
{
    private static Dictionary<string, AddRequest> DB = new Dictionary<string, AddRequest>();
    [HttpPost]
    public AddResponse Post([FromBody] AddRequest req)
    {
        AddResponse resp = new AddResponse();
        try
        {
            DB.Add(req.ISBN, req);
            resp.ISBN = req.ISBN;
            resp.message = "交易成功";
            resp.result = "S";
        }
        catch (Exception ex)
        {
            Console.Write(ex);
            resp.ISBN = "";
            resp.message = "交易失败";
            resp.result = "F";
        }
        return resp;
    }
}

net core3.1 web api中使用newtonsoft替换掉默认的json序列化组件:
第一步,引入包
https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.NewtonsoftJson

    dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson

第二步,修改sartups.cs中的 ConfigureServices
using Newtonsoft.Json.Serialization;

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
    .AddNewtonsoftJson(options =>
        {
            // Use the default property (不改变元数据的大小写) casing
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
        });
}

还有如下的方式:

//修改属性名称的序列化方式,首字母小写
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

//修改时间的序列化方式
options.SerializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy/MM/dd HH:mm:ss" });

3、客户端
新建一个目录:BookClient
创建一个Console项目:
    dotnet new console
新建HTTP请求:

static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
    string url = "http://localhost:5000/book/values";
    AddRequest req = new AddRequest();
    req.ISBN = "2";
    req.name = ".NET Core从入门到入土";
    req.authors = null;
    req.price = 1.00M;
    string req_str = JsonConvert.SerializeObject(req);//序列化成JSON

    Console.WriteLine($"[请求]{req_str}");
    string result = Post(url, req_str);
    
    Console.WriteLine($"[响应]{result}");
    AddResponse resp = JsonConvert.DeserializeObject<AddResponse>(result);//反序列化
    Console.WriteLine($"[resp.result]{resp.result}");
}

static string Post(string url, string req_str)
{
    HttpClient client = new HttpClient();
    var content = new StringContent(req_str);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    var response = client.PostAsync(url, content);
    response.Wait();
    response.Result.EnsureSuccessStatusCode();
    var res = response.Result.Content.ReadAsStringAsync();
    res.Wait();
    return res.Result;
}

切换到客户端目录下,执行程序:

cd BookClient
dotnet runn

源码收集/web/NetCoreWebAPI_Demo-master