前言
已经有很多关于如何创建一个Asp.net core MVC 和 REST API项目的教程, 例如这篇. 或者下载最新的Visual Studio 2017, 按照模板向导即可. 但是根据微软预置模板生成的工程文件比较多, 不一定都是你需要的, 而且自己动手也可以更加深入的了解到一些内部机制不是么?

由头
作为一个强迫症+洁癖晚期, 川酷向来见不得工程文件中有一丝多余.

鉴于此, 在写之前的一篇<dotnet core VS Node.js 非全面性能对比>时, 本来用
dotnet new -t web
创建了一个demo项目, 可是看到里面七七八八的文件结构, 心想我一个简单的demo, 用那么多东西岂不是无聊, 遂怒删之. 由此便有了此篇.

动手操练
本来打算使用VScode, 怎奈这新装的Visual Studio 2017爱不释手, 就用它来玩玩.
首先, 打开vs2017创建一个dotnet core的控制台项目, 这个无需多言, 看官您自行操练.
此时创建好的项目非常干净, 只有一个Program.cs文件, 另外依赖里面也没有多余的引入, 如图

我们想要打造一个web api服务, 显然没有依赖是不够的, 我们需要引入
Microsoft.AspNetCore.Hosting包, 打开Nuget管理器, 搜索它并下载

GFW貌似对Nuget的服务器不是很友好, 安装失败几次之后, 我毅然的决定使用翻墙神器.

不想用IIS做Web服务, 所以再安装Microsoft.AspNetCore.Server.Kestrel包. 忍耐过GFW带给我们的无尽等待之后, 拨云见日, 我们终于可以开始扣腚了.

代码很简单, 在Main方法中加入如下代码, 用于构建和启动Web 服务.
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
创建一个Startup类, 用于处理请求.
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Run(c => {
return c.Response.WriteAsync("Hello dotnet core.");
});
}
}
代码贴进去之后你会发现有几个错误, 别担心, 把下面的namespace引入即可.
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
至此, 一个简单, 干净的Web 服务已经搭建成功. 运行一下看看.

随便打开一个浏览器在其中输入网址http://localhost:5000/ 即可看到

进阶
作为一个Web API服务, 这样肯定还不算合格. 看官中肯定有人会提出要求我要根据不同的请求地址返回不同的内容. 容川酷修改下代码. 将请求处理的代码修改如下:
app.Run(c => {
string req= c.Request.Path.ToString().TrimStart('/').ToLower(), res=string.Empty;
switch (req)
{
case "who":
res = "川酷";
break;
case "what":
res = "Human";
break;
default:
res = "I don't know.";
break;
}
return c.Response.WriteAsync(res);
});
这样在访问http://localhost:5000/who 时, 则返回川酷. 如若访问http://localhost:5000/what 则返回Human. 是不是很有意思.

又有看官说了, Restful API会根据Http 请求的方法来决定增删改查的处理, 你咋弄? 嘿, 这个也简单.
app.Run(c => {
string req= c.Request.Path.ToString().TrimStart('/').ToLower(), res=string.Empty;
switch (req)
{
case "who":
res = "我是川酷";
if (c.Request.Method == "GET")
res += ", 你想GET我!!!!!!";
break;
case "what":
res = "Human";
break;
default:
res = "I don't know.";
break;
}
return c.Response.WriteAsync(res);
});
再来Run一下看看.

其实要实现这些功能大可不必如此费事, 只需使用MVC框架即可.

如果您觉得这篇文章对您有那么一丁点益处, 或者从某个角度触动到了您, 请给川酷一些鼓励, 打赏, 点赞, 关注, 哪怕评论区骂我两句, 鄙人都感激涕零.
网友评论