概述

大概记录下我如何第一次使用.net core搭建一个api,由于最近.net core比较火,我也尝试着使用.net core做了一个小功能

本文主要包括

1.环境配置

2.程序编写

3.程序部署

主要参考:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.1&tabs=visual-studio

1、环境配置

想要使用.net core3.1 第一个问题是更新VS,更新过程中遇到报错

VS_InstallerShell.exe has an invalid certificate. Please ensure the appropriate Microsoft certificates are installed

网上很多方法试过没有效果,最后在哪里(自己也忘记了)找到了解决方案,安装两个windows补丁,附上补丁编号和下载地址

https://www.catalog.update.microsoft.com/Home.aspx

KB4474419
kb4490628

2.程序编写

安装了最新vs以后,点击新建项目,创建3.1 .net core API项目,创建以后可以直接运行,会有一个天气预报的示例

使用Nuget安装Microsoft.EntityFrameworkCore.SqlServr,ef我虽然没有在实际项目中使用过,不过陆陆续续知道点,今天顺便试试

2.1 创建数据库上下文类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore; namespace reportAPI
{
public class ChartDesignContenxt: DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var sqlConnectionStringBuilder = new SqlConnectionStringBuilder
{
DataSource = "*.*.*.*",
InitialCatalog = "*",
UserID = "sa",
Password = ""
};
optionsBuilder.UseSqlServer(sqlConnectionStringBuilder.ConnectionString); base.OnConfiguring(optionsBuilder);
}
public DbSet<chartDesign> chartDesigns { get; set; }
}
}

2.2 在startup.cs类中注入数据库上下文类,添加跨域配置

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; namespace reportAPI
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//允许一个或多个具体来源:
services.AddCors(options =>
{
// 配置跨域
options.AddPolicy("cors", policy =>
{
// 设定允许跨域的来源,有多个的话可以用 `,` 隔开
policy
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
}); services.AddScoped<IPMSDbContenxt>(_ => new IPMSDbContenxt());
services.AddScoped<ChartDesignContenxt>(_ => new ChartDesignContenxt()); //注入数据库上下文类 services.AddControllers();
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseHttpsRedirection(); app.UseRouting(); app.UseCors("cors"); //使用跨域 app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}

2.3 创建控制器,一共三个方法,获取列表,更新一条记录,获取一条记录

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; namespace reportAPI.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class ChartDesignController : ControllerBase
{
private readonly ChartDesignContenxt _context; public ChartDesignController(ChartDesignContenxt context)
{
_context = context;
} [HttpPost]
public IActionResult Save(CommonFilter filter)
{
try
{
//var temp = entity.data.ToString();
chartDesign model = new chartDesign();
model.designName = filter.field1;
model.designContent = filter.data.ToString();
if (filter.key == -)
{
_context.Add<chartDesign>(model);
}
else
{
model.designId = filter.key;
_context.Update<chartDesign>(model);
}
_context.SaveChanges();
return Ok("保存成功");
}
catch(Exception ex)
{
return Ok(ex.Message);
} }
[HttpPost]
public IActionResult Get(CommonFilter filter)
{
try
{
chartDesign entity = _context.chartDesigns.Find(filter.key);
if (entity == null)
{
return NotFound();
} return Ok(entity);
}
catch(Exception ex)
{
return Ok(ex.Message);
}
}
[HttpPost]
public IActionResult GetList()
{
try
{
string sql = "select * from chartDesign";
List<chartDesign> list = _context.chartDesigns.ToList(); //.FromSqlRaw(sql).ToList();
return Ok(list);
}
catch (Exception ex)
{
return Ok(ex.Message);
}
}
}
}

一个增删改完成

3.部署到服务器

部署比较简单,直接拷贝bin下面的内容,然后双击  项目名.exe 服务就启动起来了

.net core试水的更多相关文章

  1. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  2. 大众点评试水O2O新模式:实体店试穿,扫描二维码付款 现场取货

    在餐饮美食行业取得不错的成绩之后,大众点评将触角延伸到了线下的传统商铺,开始涉足线下商品的 O2O 团购.和传统的线上下单,线下消费的 O2O 模式不同.大众点评的 O2O 团购用户,可在店内试穿后通 ...

  3. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  4. 第一回:Scrapy的试水

    前言:今天算是见到Scrapy的第二天,之前只是偶尔查了查,对于这个框架的各种解释,我-----都-----看------不------懂----,没办法,见面就是刚. 目的:如题,试水 目标:< ...

  5. CSharpGL(49)试水OpenGL软实现

    CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇.本篇内容是用C#编写一个OpenGL的软实现.暂且将其命名为SoftGL. 目前已经实现了由Vertex Shader和 ...

  6. UITableView(自定义cell)试水心得

    初次试水自定义cell的UITableView 实现目标      最终实现结果   界面复原度:98% 未能完全复刻的地方:下半部分的tableview与头部的控件间距上的误差 原因:在做table ...

  7. 微博试水卖车社交电商怎样令4S“颤抖”?

        微博对社交电商的探索一直在深入,年初.微博上线了"支付"产品.从而使社交产业链实现了闭环,随后,微博又尝试售卖多种商品,不断扩大移动电商的试水范围,近期微博大规模汽车销售收 ...

  8. phaser2->3:来个打地鼠试水

    本文中phaser具体版本 phaser2:2.8.1 phaser3:3.17.0 一.实现效果二.实现细节三.项目总结四.参考文档 一.实现效果 源码地址(phaser2&phaser3) ...

  9. .net core API第一次试水

    这是我第一个API 项目他比普通的.NET CORE APPLICATION要多一个controllers层和appsetting.json 我们主要研究一下流程是怎么样的 在我尝试着改变launch ...

随机推荐

  1. python基础之逻辑题(3)

    Python基础之逻辑题(3) 1.编写一个函数实现将IP地址转换成一个整数 2.求结果:---lambda 3.求a的结果 4.求下面nums的输出 5.求下面片段的输出 6.写出程序的结果:--- ...

  2. laravel5.6之发送邮件

    https://blog.csdn.net/weixin_41767780/article/details/80918143 在注册的时候可以增加一个邮箱激活的功能,为防止自己忘记,记录一下实现邮箱激 ...

  3. Mysql错误:#1054 - Unknown column 'id' in 'field list' 解决办法

    第一次用mysql,在插入数据时,竟然报这样的错误, #1054 - Unknown column 'id' in 'field list'

  4. HTML静态网页--JavaScript-Window.document对象

    1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunmen ...

  5. supersocket实现你的命令

    现在, 如果你有一个命令行协议的服务器实例 "IronPythonServer", 而且我们要用 Python 创建一个 "ADD" 命令用于让两个整数相加,然 ...

  6. Group_concat介绍与例子

    进公司做的第一个项目就是做一个订单追踪查询,里里外外连接了十一个表,作为公司菜鸡的我麻了爪. 其中有一个需求就是对于多行的数据在一行显示,原谅我才疏学浅 无奈下找到了项目组长  在那学来了这个利器 ( ...

  7. hdu 4394 Digital Square(bfs)

    Digital Square Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. python基础十一之装饰器进阶

    函数的双下划线方法 def hahahha(): """测试函数""" print('zxc') print(hahahha.__name_ ...

  9. codeforce 382 div2 E —— 树状dp

    题意:给一棵n个结点的无根树染色,求使每个结点距离为k的范围内至少有一个被染色的结点的总染色方法数目 分析:首先我们定义: 对于结点v, 如果存在一个黑色结点u距离v不超过k,则结点v被“控制” 首先 ...

  10. 2019-8-4-自动更新所有-Git-仓库

    title author date CreateTime categories 自动更新所有 Git 仓库 lindexi 2019-08-04 14:44:59 +0800 2019-08-01 2 ...