NetCore WebAPI开发探索
一、创建项目
新建api项目:
建好之后,一个默认的控制器已经有了:
运行就可以直接访问get接口获取数据:
二、跨平台部署
部署方面,微软已经完善的很好了,基本上算是傻瓜式操作。项目右键选择发布:
部署模式可以采用框架依赖,或独立,选择框架依赖,则需要在目标平台安装netcore运行时后才能运行netcore程序。
平台可以选择windows或linux:
发布完成后,直接运行“dotnet *.dll”即可将api服务建立起来,默认建立http的5000端口和https的5001端口,可直接访问。
三、客户端访问代码
/// <summary> /// post函数 /// </summary> /// <param name="url">服务器post地址</param> /// <param name="args">api参数</param> async void PostData(string url, string[] args) { var httpClient = new HttpClient(); //Post数据序列化 var json = Newtonsoft.Json.JsonConvert.SerializeObject(args); var stringContent = new StringContent(json); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); //设定安全协议,不然访问默认的netcore地址会报错:基础流已关闭 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11; var response = await httpClient.PostAsync(url, stringContent); var str = await response.Content.ReadAsStringAsync(); Console.WriteLine("post:" + str); }
四、遇到的问题与解决
在本机用localhost,127.0.0.1等地址访问都没问题,当想测试linux环境,在centos虚拟机里服务运行后,在本机就是无法访问,但是在虚拟机内部又是没问题的。通过搜索引擎查询并解决,下面是问题与解决方法,排名不分先后。
1.运行报错Couldn't find a valid ICU package installed on the system.
安装icu库,运行命令:yum install icu
2.防火墙问题
(1) 查看状态:firewall-cmd --state
(2) 关闭防火墙:systemctl stop firewalld
3.外部无法访问
默认的localhost只能本地访问,需要在代码中指定:WebHost.CreateDefaultBuilder(arg).UseUrls("http://*:5000") .UseStartup<Startup>();
或在部署是直接指定:dotnet *.dll --urls http://*:5000
4.连接sqlserver2008R2服务器超时
Netcore在linux下如果SqlServer2008低于SP3版本,会出现连接超时的问题。只要去官方下载SqlServer 2008 Sp3 补丁安装即可。
https://www.cnblogs.com/weiweithe/p/7810803.html
五、卷尾
Netcoreapi提供了一个新的解决方案,方便用户采用同一套代码构建跨平台程序,大大减少了开发工作量。微软正在准备NetCore3.0的发布,面向图形化界面的开发,发布后netcore的应用面应该会更广。
学海无涯,共同进步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义