一、使用.Net Core构建WebAPI并访问Docker中的Mysql数据库

这个的过程大概与我之前的文章《尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)》一致。

但是在我们这里,由于docker中无法部署sql server,所以我采用了Mysql数据库,顺便吐槽一下 SQL Server真的太贵了,阿里云的Mysql实例价格和SQL Server实例价格差10倍,真的好夸张。

Mysql官方的EF Core支持刚刚出来,由于文章是后续补充的,在我尝试的时候官方驱动还没有出,所以我使用的是第三方的驱动:Pomelo.EntityFrameworkCore.MySql,据说是国内一个90后的小伙儿写的,非常牛X.

引用之后,就和EF访问SQL Server没有什么区别了,但是:由于我们的Mysql实例是安装在Docker容器中的,那两个Docker容器之间怎么互相通信呢?

首先在启动API Image的时候,需要使用--link 命令,来建立API和Mysql 容器之间的访问通道,大概命令如下:

docker run -it -p : --name testapi --link msyqldb:msyqldb testapi

在Link的时候我们给需要连接的容器起了一个别名,这个别名就是一个主机名一样,可以直接用来访问,这个时候我们的连接字符串就类似于:

Data Source=mysqldb;port=;Initial Catalog=数据库名称;Integrated Security=False;Persist Security Info=False;User ID=用户名;Password=密码

这里,我们的DataSource,也就是实例的名称,就直接写主机名,也就是我们在Link的时候起的那个别名,就OK啦~只要你突破了这点,那访问基本上就没有什么问题了。

Coding 工作结束之后,发布你的API,并且最终打包成Image,启动容器,这一系列过程可以参考我的上一篇文章:《【Step By Step】将Dotnet Core部署到Docker上

二、使用.Net Core构建一个Web程序并访问Docker中的WebAPI

在Docker中的Web程序访问另外一个Docker容器中的API, 需要解决的问题如下:

1.API的路径是啥?

2.跨域问题

其中第一个问题的解决思路和我们上面连接数据库的解决思路是完全一致的,只要在Link的时候,加上别名,就可以用http://别名:端口号 来访问你的api即可。

第二个问题不仅仅是在docker中会遇到的问题,在平时我们开发Web程序时,也会遇到这样子的问题,常用的解决方案有以下几种:

A.避免用js访问API,而采用后端代码去调用,就没有跨域这一说了

B.后端API HttpHeader增加Access-Control-Allow-Origin:* Access-Control-Allow-Headers:Content-type  Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS三个选项

C.Jsonp,就是把数据当做一个js文件来加载~

这里我采用方法A来解决跨域问题(简单、暴力、最彻底):

第一步:通过Nuget引用Orion.ApiClientLight类库,这是一个封装了一系列调用api方法的类库,我们可以通过他很方便的调用API并序列化结果

第二步:在Controller中初始化APIClient对象,JsonApiClientLight apiClient = new JsonApiClientLight();

第三步:调用方法来访问API。

下面的代码是我调用一个CRUD的API来访问API的简单实现:

  public class HomeController : Controller
{
JsonApiClientLight apiClient = new JsonApiClientLight(); public async Task<IActionResult> Index()
{
var list = await apiClient.GetAsync<List<Member>>("http://jb91api:9103/api/mermbers/mermber/list");
return View(list.Response);
} [HttpGet]
public IActionResult Create()
{
return View();
} [HttpPost,ActionName("Create")]
public async Task<IActionResult> CreatePost(CreateMember model)
{
if(ModelState.IsValid)
{
var member = await apiClient.PostAsync("http://jb91api:9103/api/mermbers/mermber/", model);
return RedirectToAction("Index");
}
return View(model);
} public async Task<IActionResult> Delete(int id)
{
if (id > )
{
await apiClient.DeleteAsync("http://jb91api:9103/api/mermbers/mermber?id=" + id.ToString());
}
return RedirectToAction("Index");
}
}

【Step By Step】将Dotnet Core部署到Docker下的更多相关文章

  1. 【Step By Step】将Dotnet Core部署到Docker上

    本教程的前提是,你已经在Linux服务器上已经成功的安装了Docker,我会大概介绍在此过程中用到的Docker命令,并不会介绍所有的Docker命令(因为我也不会). 一.在Docker中运行Dot ...

  2. 【Step By Step】将Dotnet Core部署到Docker(中)

    在Docker中运行MySql MySQL 官方也提供了各种版本的MySQL Image来供用户使用,我们可以使用如下命令来创建并运行一个MySQL Image: docker run -it -p ...

  3. .NET core 部署到Docker +Docker Protainer管理实现

    .NET core 部署到Docker +Docker Protainer管理实现 上次说到将.net core的应用程序发布到Linux中(https://www.cnblogs.com/Super ...

  4. dotnet core部署方式两则:CLI、IIS

    最近在使用dotnet core研究整个开发过程,使用下面两种方式部署: 一,使用 dotnet run 命令运行 在项目路径,shift+右键,选择 “在此处打开命令窗口”,在CMD窗口中运行“do ...

  5. Linux下将.Asp Core 部署到 Docker容器中

    我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...

  6. 我用asp.net core 部署到docker遇到的问题

    1.怎么部署 我是用文件的形式先发布出来,然后把文件拷贝到服务器上部署到docker中去. 2.端口映射 根据查找到的资料,dockerfile 是不支持指定映射服务器端口的,只能在run的时候用-p ...

  7. 将.NET Core部署在Docker

    转载自:ASP.NET Core 2.1 使用Docker运行 1.新建ASP.NET Core项目 新建一个名为“DockerSample”的ASP.NET Core项目 运行程序,页面如下: 2. ...

  8. 【Core】.NET Core 部署( Docker + CentOS)

    CentOS 下 Docker安装 使用脚本安装 Docker (1)安装docker  sudo yum install docker (2)启动docker systemctl  start do ...

  9. 关于.Net Core 部署在Linux下连接SqlServer数据库超时解决办法

    .Net Core 在 Linux 下连接 SqlServer 需要 SqlServer2008 SP3或以上版本,或SqlServer2012,或SqlServer2014. 如果SqlServer ...

随机推荐

  1. UOJ188. 【UR #13】Sanrd

    传送门 Sol 设 \(f_i\) 表示 \(i\) 的次大质因子 题目就是要求 \[\sum_{i=l}^{r}f_i\] 考虑求 \(\sum_{i=1}^{n}f_i\) 所求的东西和质因子有关 ...

  2. bootstrap学习笔记细化(表单)

    主要属性: class="form-inline" 水平排列 class="form-group" 组键 form-control 圆角方框发光 input-l ...

  3. encodeURIComponent() 函数的使用

    说明:encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 维护项目中,遇到一个登录的问题:(用户的loginName为33195221,密码为147258369+), ...

  4. 伪元素::before与::after的用法

    ::before与::after两个伪元素其实是CSS3中的内容,然而实际上在CSS2中就已经有了这两者的身影,只不过CSS2中是前面加一个冒号来表示(:before和:after).今天主要讲讲这两 ...

  5. Java内存模型(JMM)以及 垃圾回收机制 小结

    内存模型: 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,这点没有错,但是编译 ...

  6. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  7. .NET AOP微型框架发布 --CleanAOP

    CleanAOP--简介 作者:立地(欧文) 邮箱:jarvin_g@126.com 导语: AOP为Aspect Oriented Programming的缩写. 意为:面向切面编程.将日志记录,性 ...

  8. jquery 仿windows10菜单效果下载

    http://www.kuitao8.com/20150923/4079.shtml jquery 仿windows10菜单效果下载

  9. Android中使用异步线程更新UI视图的几种方法

    在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...

  10. 安卓app开发-05-Android xml布局详细介绍

    安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...