.Net Core(一) Web API项目搭建
<h2>一、前言</h2><p>基于CefSharp开发的浏览器项目已有一段时间,考虑到后期数据维护需要Server端来管理,故开启新篇章搭建浏览器后端服务。该项目前期以梳理服务端知识为主,后期将配合CefSharp浏览器项目一起使用。</p>
<p>关于服务端技术选型,考虑到近期刚好有项目需求,并且本人也想学习下Web API相关知识。故采用.Net Web API技术搭建后端服务项目。</p>
<h2>二、 Web API简介</h2>
<p><span id="result_box" lang="zh-CN">ASP.NET Web API是一个框架,可以轻松构建HTTP服务,覆盖广泛的客户端,包括PC和移动设备。</span></p>
<p><span lang="zh-CN"><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202113254029-2128689262.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></span></p>
<h2>三、Web API项目搭建</h2>
<p> 打开VS 创建新项目选择【ASP.NET Core Web 应用程序】点击 【下一步】</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202132637637-884256381.png" alt="" width="918" height="657" loading="lazy"></p>
<p>填写Project name及Location,点击【Create】<br><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202132850231-1855925952.png" alt="" width="915" height="654" loading="lazy"></p>
<p>为了更好了解Web API项目,这里选择空项目,一步步搭建,关于Https及docker后期需要时在配置,暂时不勾选,点击【Create】</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202133911875-889346748.png" alt="" width="920" height="638" loading="lazy"></p>
<p>创建完成后F5 运行 我们熟悉的Hello World出现了。</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202135946541-245225585.png" alt="" loading="lazy"></p>
<h2>三、项目结构分析</h2>
<p>创建完成后解决方案生成如下,红框处为项目所需依赖,绿框为项目配置文件,橘黄框为项目启动入口及启动设置,项目依赖可通过NuGet引用。</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202140837570-2042288118.png" alt="" loading="lazy"></p>
<h3>1、launchSettings.json</h3>
<p id="autoid-0-0-0">launchSettings.json 用于项目的运行准备工作。参数如下</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202145711376-1978053169.png" alt="" loading="lazy"></p>
<p>红框中的启动方式对应VS的选择的启动方式,IIS ExPress以IIS方式启动,Project 以 Kestrel方式启动</p>
<p>我们也可以增加启动方式配置</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210202151011052-757482096.png" alt="" loading="lazy"></p>
<h3>2、appsettings.json</h3>
<p>appsettings.json 用于项目运行时所需的配置,比如数据库配置、Redis配置、日志配置、路径配置、其他配置等。</p>
<p>在实际开发中环境一般分为开发环境、测试环境、生产环境。</p>
<p>而项目默认创建两个配置文件:appsettings.json (公用配置文件)、appsettings.Development.json (开发环境配置文件)</p>
<p>如需配置生产环境可自行创建生产环境配置文件 appsettings.Production.json</p>
<p>并改变launchSettings.json中ASPNETCORE_ENVIRONMENT的value为Production</p>
<h3> 3、Program</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Program
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
{
CreateHostBuilder(args).Build().Run();
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> IHostBuilder CreateHostBuilder(<span style="color: rgba(0, 0, 255, 1)">string</span>[] args) =><span style="color: rgba(0, 0, 0, 1)">
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder </span>=><span style="color: rgba(0, 0, 0, 1)">
{
webBuilder.UseStartup</span><Startup><span style="color: rgba(0, 0, 0, 1)">();
});
}</span></pre>
</div>
<p>在Program中看到了熟悉的Main方法,找到了程序的入口,Main方法中执行了 CreateHostBuilder(args).Build().Run(),创建、配置IHostBuilder并运行</p>
<p>CreateHostBuilder很复杂,感兴趣的可查看源代码分析,功力有限这里不做深入解析。</p>
<h3>4、Startup</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> ConfigureServices(IServiceCollection services)
{
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This method gets called by the runtime. Use this method to configure the HTTP request pipeline.</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints </span>=><span style="color: rgba(0, 0, 0, 1)">
{
endpoints.MapGet(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">async</span> context =><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">await</span> context.Response.WriteAsync(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello World!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
});
});
}</span></pre>
</div>
<p>Startup中提供了两个方法 ConfigureServices和Configure</p>
<p>ConfigureServices用于服务注入,如数据库服务,缓存服务等可在这里进行注入</p>
<p>Configure用于指定ASP.NET应用程序如何响应HTTP请求,这里通过配置中间件来完成请求处理,如可配置IP记录、静态资源处理等中间件等。</p>
<h2>四、创建第一个接口</h2>
<p>Configure方法中 UseEndpoints 返回的是“Hello World!”,那如何创建想要的接口呢?</p>
<p>起初创建的是空项目,再创建个api项目做下对比(创建过程和空项目类似,只是选择API,此处略过),对比如下:</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210203090132726-1111203968.png" alt="" loading="lazy"></p>
<p>API项目中多了Controllers文件夹及WeatherForecas实体类</p>
<p>再看Startup类的对比:</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210203090501090-2117731449.png" alt="" loading="lazy"></p>
<p>API项目ConfigureServices 方法中 将控制器的服务注入IServiceCollection</p>
<p>API项目Configure 方法中 将控制器操作的终结点添加到.net 的路由</p>
<p>由上对比可知,我们需要更改空项目,添加控制器的服务注入并将控制器操作的终结点添加到.net 路由,代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> This method gets called by the runtime. Use this method to configure the HTTP request pipeline.</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints </span>=><span style="color: rgba(0, 0, 0, 1)">
{
endpoints.MapControllers();
});
}</span></pre>
</div>
<p>接着创建Controllers文件夹,并添加一个控制器为HomeController如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)]
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> HomeController : Controller
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Get()
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Home</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
}
}</span></pre>
</div>
<p>F5运行</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210203093020684-516177572.png" alt="" loading="lazy"></p>
<p>运行后发现404,这是由于路由映射问题导致,浏览器输入http://localhost:52233/Home</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210203093225239-143355104.png" alt="" loading="lazy"></p>
<p> 运行正常,如何让程序启动后直接映射到Home控制器?这时用到前文提到的launchSettings.json文件,添加键值配置 "launchUrl": "Home",</p>
<p><img src="https://img2020.cnblogs.com/blog/814381/202102/814381-20210203093542138-1181910044.png" alt="" loading="lazy"></p>
<p>重新启动,默认访问HomeController,好了,第一个接口创建成功。</p>
<h2>五、结语</h2>
<p>本章节创建了一个默认WebAPI项目,对项目中结构做了简单表述,并创建了第一个接口。刚开始接触Web服务类项目,若有不对之处,请各位道友指正!</p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
天行健,君子以自强不息;
地势坤,君子以厚德载物;<br><br>
来源:https://www.cnblogs.com/mchao/p/14360306.html
頁:
[1]