概述

大概记录下我如何第一次使用.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基础:26模块

    一:模块和文件 1:模块是逻辑上组织 Python 代码的方法,文件是物理层上组织模块的方法.因此,一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件. 模块的文件名就是模块的名字加上扩展名 ...

  2. 阿里云DataWorks正式推出Stream Studio:为用户提供大数据实时计算的数据中台

    5月15日 阿里云DataWorks正式推出Stream Studio,正式为用户提供大数据的实时计算能力,同时标志着DataWorks成为离线.实时双计算领域的数据中台. 据介绍,Stream St ...

  3. 在ORACLE存储过程中创建临时表

    在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...

  4. getopt、getopt_long和getopt_long_only解析命令行参数

    一:posix约定: 下面是POSIX标准中关于程序名.参数的约定: 程序名不宜少于2个字符且不多于9个字符: 程序名应只包含小写字母和阿拉伯数字: 选项名应该是单字符或单数字,且以短横 '-' 为前 ...

  5. Vue 属性绑定v-bing 事件绑定v-on

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. vue基于 element-ui 实现菜单动画效果,任意添加 li 个数均匀撑满 ul 宽度

    %)%)%%%))) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .% %% %deg);}

  7. H3C 示例:根据子网数划分子网

  8. JDK自带的native2ascii工具介绍

    背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...

  9. ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(3)

    接下来完成用户.角色的增删查改,以及用户角色.权限的设置 对用户表.角色表做了一些扩展如下[可以更加自己需要增减字段] 相应的M_UserProfile.cs.M_Roles.cs进行扩展 using ...

  10. geoip ip2region2 with spark

    上一篇文章中 我使用 maxmind的免费库开发了一个waterdrop的 插件,测试数据发现,国内的有些市级还是不准确,而且香港并不是显示中国,这就不友好了. 找了一下,发下 ip2region 这 ...