建议使用visual studio2017或rider(visual studio低版本不支持.net core2),rider的步骤与visual studio一样操作,这里我的dotnet版本是2.1.201
首先新建项目,选择.NET Core ->ASP.NET Core Web Application ->Web API
项目构建好后添加nuget包:Microsoft.EntityFrameworkCore.Sqlite 和 Microsoft.EntityFrameworkCore.Tools,安装好后如下:
这里使用Entity FrameWork的codefirst,所以新建实体类和DbContext:
namespace netCoreApi1
{
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { set; get; }
[MaxLength(50), Required]
public string Name { set; get; }
}
class MyContext : DbContext
{
public DbSet<User> Set_User { set; get; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string cntString = "Data Source=MyTestDb.db";
optionsBuilder.UseSqlite(cntString);
}
}
}
这里User是实体类,字段可以添加相应注解(建议添加主键,未添加主键的实体类未测试)。
MyContext继承自DbContext,DbSet会对应生成数据库的表。
在OnConfiguring方法中将连接字符创设置到UseSqlite方法中。
接下来在Startup.cs中的ConfigureServices方法中进行如下配置:
services.AddDbContext<MyContext>();
另外可以在program.cs中配置端口号,在BuildWebHost方法中添加:(不配置默认是http://localhost:5000)
.UseUrls("http://0.0.0.0:5555")
在修改项目目录下的{projectname}.csproj文件,将DotNetCliToolReference标签改为:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
否则 dotnet 的 ef 命令将不可用
接着在powershell或者cmd中进入到项目目录(非解决方案目录,是项目目录)
依次执行如下命令:
dotnet restore
dotnet ef migrations add InitialCreate
dotnet ef database update
之后会在之前配置连接字符串相应位置生成一个对应的sqlite数据库文件,这里我手动写入相应的数据到数据库,
之后再controller中获取数据库中数据,修改get方法:
[HttpGet("users")]
public List<User> Get()
{
using(MyContext context = new MyContext()){
var users = context.Set_User.ToList();
return users;
}
}
这里默认返回的数据格式是json
构建 运行此项目,在浏览器中输入http://localhost:5555/api/values/users ,即可调用api
在发布时需注意:
1、在visual studio中右击生成的数据库文件,选择属性,将“复制到输出目录”选项设置为“始终复制” 保存(目测rider不支持此项)
如果不设置,可在发布后手动将数据库文件复制到相应目录,否则没有数据库,运行时会出错!
2、在发布后运行有可能会出现 清单文件相关的报错,解决方案是:配置{projectname}.proj,在 <PropertyGroup> 标签中添加如下配置:
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
重新构建后再发布即可
3、高版本的dotnet可能代码略有不同,而且默认使用https可能会导致无法访问,这里禁用https注释掉startup.cs中Configure方法中的如下代码
// app.UseHttpsRedirection();
4、高版本的dotnet可能不需要如下配置:
在修改项目目录下的{projectname}.csproj文件,将DotNetCliToolReference标签改为:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
5、跨域
在startup.cs的Configure方法中添加:
app.UseCors(builder =>
{
builder.AllowAnyHeader();
builder.AllowAnyMethod();
builder.AllowAnyOrigin();
});
若上述方法无效,则使用此方法:
NuGet添加Microsoft.AspNetCore.Cors
在startup.cs的ConfigureServices方法中添加:
//配置跨域处理
services.AddCors(options =>
{
options.AddPolicy("any", builder =>
{
builder.AllowAnyOrigin() //允许任何来源的主机访问
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();//指定处理cookie
});
});
在控制器或方法上加注解: [EnableCors("any")]
参考:https://www.cnblogs.com/tianma3798/p/6920704.html
ps:windows平台安装.net core :https://www.microsoft.com/net/download/windows
linux系列平台可根据微软相关教程:https://www.microsoft.com/net/download/linux
若安装不成功;可手动下载配置: https://www.microsoft.com/net/download/all