安装 Ubuntu

       dotnet core 跨平台已不再是梦,它带来的意义非凡,比如api接口可以在linux上编写及部署,也可以在windows上编写好,打包发布,然后copy到linux上部署从官网下载最新版本, 然后装到虚拟机VMware中。如果是centeros,系统开启后,默认进入命令行模式,估计一部分同学,看到类似dos界面,有点恐慌,不急,在命令行中输入startx回车,进入到图形界面。无论是哪种系统,虚拟机上装的操作系统,在开机启动后,都有可能窗口不能自适应,也就是说不能全屏,非常小。针对windows,直接运行VMware Tools即可。针对linux系统,我们直接双击是安装不了的。这是Ubuntu漂亮的紫色界面:

输入密码,登录到系统中。定位到VMware Tools安装目录,它还是tar.gz压缩文件,所以首先解压缩,用cd命令转到解压后的目录(直接打开目录,然后鼠标右键打开终端,就不用cd了),输入./vmware-install.pl,一路回车。

安装vscode

从官网下载vscode,上面有注明操作系统。centeros是从redhat发展而来的。ubantu是基于Debian。前者擅长服务器端,后者主要是pc端。

1、下载安装包 .deb package (64-bit)

2、sudo apt install ./<file>.deb

3、Then update the package cache and install the package using:

 sudo apt-get install apt-transport-https
sudo apt-get update
 sudo apt-get install code # or code-insiders

linux上安装vscode的确能麻烦一些。安装完了后,不知道装到哪儿去了。于是就搜索vscode,没有找到,搜索全名也没有找到,后来发现名称叫code,终于搜索到了,把code加入到桌面的收藏夹里,就出现在桌面左侧,相当windows的桌面快捷方式。如下图:

部署dotnet core web API

在命令行中,输入 dotnet  new webapi,结果不识别dotnet,它不是命令,建议安装.net core sdk,我装了最新的版本2.2。然后再运行命令创建api。

打包发布的命令:dotnet publish --configuration Release

自托管命令: dotnet ElectronInfoApi.dll

默认监听的地址:https://localhost:5001

我想要改变端口,在网上找了一种方法:

var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("https://localhost:5001/")
.Build(); host.Run();

  更改url或者端口都可以,这就是传说中的硬编码。因为上面的代码是在 Main(string[] args)方法里,所以可以从命令行传参,经过实践,这种方式是可以的。传参:dotnet ElectronInfoApi.dll  server.urls=https://192.168.19.1:9000,代码中接受参数:var  url=args.Length>0?args[0]:" ";

  还有另外一种方法,就是什么都不用修改,这是命令行创建api的时候,自动生成的代码:

    public class Program {
public static void Main(string[] args) {
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup <Startup> ();
}

发布后运行结果:

IIS或者其它服务器上部署,端口配置,都有图形化界面操作,不是什么问题。我在linux上发布了接口,然后window上的vue程序就可以请求了。先在postman中测试:

好了,这样linux上的接口部署完毕,测试成功。

dotnet core api 传参 

1、get请求传参

      [HttpGet]
[Route("Items")]
public JsonResult GetAll(int pageSize, int pageIndex)
{
AjaxResult result = new AjaxResult();
var list = DbHelper.Select<Achievement>(); var companys = DbHelper.Select<Company>();
var users = DbHelper.Select<User>(); //转换为ViewModel
List<AchievementViewModel> models = new List<AchievementViewModel>();
foreach (var item in list)
{ var vm = ModelConvertion.Convert<AchievementViewModel, Achievement>(item);
var company = companys.SingleOrDefault(c => c.Id == item.CompanyId);
vm.CompanyName = company == null ? "" : company.CompanyName;
var user = users.SingleOrDefault(u => u.Id == item.Completer);
vm.CompleterName = user == null ? "" : user.UserName;
models.Add(vm);
} result.Data = models.OrderByDescending(f => f.PublishDate).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
result.ItemCount = models.Count;
return Json(result); } [HttpGet("{id}")]
public ActionResult<Achievement> GetById(int id)
{
return DbHelper.SingleById<Achievement>(id);
}

两种方法,一个把参数放到路由里,一个不放,都可以,根据情况决定。不建议在接收的时候,使用对象接收,因为可能接收不到参数,对象前加上[FromUrl],不知道能不能收到,有兴趣的同学可以尝试。

2、post方法

        [HttpPost]
[Authorize]
public JsonResult item([FromBody] Achievement item)
{
AjaxResult result = new AjaxResult();
try
{
if (DbHelper.Exist<Achievement>(b => b.Id == item.Id))
{ result.IsSuccess = DbHelper.Update<Achievement>(item) > 0;
}
else
{
result.IsSuccess = DbHelper.Insert<Achievement>(item, true) > 0;
}
}
catch (Exception ex)
{
result.IsSuccess = false;
result.Message = "保存出错";
this.Log().Error("保存出错", ex);
}
return Json(result);
}
[HttpPost]
[Route("[action]/{id}")]
[Authorize]
public ActionResult Delete(int id)
{
AjaxResult result = new AjaxResult();
if (DbHelper.Delete<Achievement>(c => c.Id == id) > 0)
{
result.IsSuccess = true;
UserManager.DeleteUserRef(id,2);
}
else
{
result.IsSuccess = false;
}
return Json(result);
}

post时,数据也可以从路由来,也可以直接传,接收时,如果以对象接收,前面加上[FromBody]。否则部署后,很有可能接收不到参数。

linux上编写运行 dotnet core api的更多相关文章

  1. .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点

    2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...

  2. 使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序

    本文于2019年04月10日将标题「CentOS7 部署 ASP.NET Core应用程序」修改为「使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序」. 环境准备 VMwa ...

  3. .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点

    今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...

  4. npm run dev 在Linux上持久运行

    关于node.js应用程序如何持久运行,我在node.js服务端程序在Linux上持久运行用过. 这次主要是针对是一个vue.js应用程序. vue.js应用程序通常运行命令是npm run dev. ...

  5. node.js服务端程序在Linux上持久运行

    如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...

  6. springboot打成的jar包如何在Linux上持久运行

    一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...

  7. Linux上后台运行node和springboot服务

    环境:Ubuntu18.04 阿里云云服务器 尝试全局安装forever和pm2均失败,最后以linux自带的nohub启动,以前同样用nohub启动springboot 命令: nohup npm ...

  8. 使用 Nginx 在 Linux 上托管 ASP.NET Core

    server { listen 80; server_name example.com *.example.com; location / { proxy_pass http://localhost: ...

  9. Docker上运行dotnet core

    下载microsoft/dotnet镜像 运行命令: docker pull microsoft/dotnet 如果没有使用阿里镜像加速的,参照这篇先配置好再跑上面命令: http://www.cnb ...

随机推荐

  1. angularjs 的controller的三种写法

    AngularJS 的controller其实就是一个方法,它有三种写法: 第一种: <pre name="code" class="javascript" ...

  2. 源码编译配置lnmp部署zabbix

    环境说明: [root@wcy ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@wcy ~]# uname -a Linux ...

  3. CentOS上使用sendmail发送邮件

    设置方法 set from=fromUser@domain.com smtp=smtp.domain.com set smtp-auth-user=username smtp-auth-passwor ...

  4. oracle数据库插入优化

    通过程序要把1000万的数据插入到数据表中,刚开始每100条数据耗时50ms左右,但是越往后越慢,最慢到了十几秒的都有,真实好坑了. 于是在网上百度了一波,如何进行insert优化.倒是有了一点小小的 ...

  5. Shell 运算符 if

    Shell 支持多种运算符,包括: 算术运算符 原生bash不支持简单的数学运算,可以使用 expr,let 关系运算符 布尔运算符 字符串运算符 文件运算符 算术运算符 包括加减乘除,取余(%).赋 ...

  6. MVVM架构说明1

    MVVM是Model-View-ViewModel的简写.微软的WPF带来了新的技术体验,如Sliverlight.音频.视频.3D.动画……,这导致了软件UI层更加细节化.可定制化.同时,在技术层面 ...

  7. MVC3;0问题与知识点

        1.    代码中@Html.BeginForm不对,应 @using(Html.BeginForm){}   2.   不设置 注解 required属性中的 errormessage,则错 ...

  8. C++(二十一) — 引用概念及本质

     1.引用概念 引用是别名,必须在声明的时候初始化.即:是指一个已定义变量的别名.(一个内存空间,有两个名字都可以操作) 引用:在函数调用时,是变量的别名,不可以单独存在,使用时必须要初始化: 指针: ...

  9. 使用命令行启动spring boot项目

    1.找到项目路径 cd target 2.敲命令--------java -jar xxxx.jar ------------------------------------------------- ...

  10. nginx 相关资料

    1.https://juejin.im/post/5a2600bdf265da432b4aaaba (nginx从入门到实践) 2.https://blog.csdn.net/hzsunshine/a ...