Demo+在Linux下运行(CentOS7+dotnetcore sdk)

时间:2023-03-09 15:48:11
Demo+在Linux下运行(CentOS7+dotnetcore sdk)

来份ASP.NET Core尝尝

0x01、前言

学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是

略懂一二。如果有错误,还望见谅。

本文还是和之前一样,Demo+在Linux下运行(CentOS7+dotnetcore sdk)

开发环境:win10+vs2015+sqlserver2014

0x02、demo

新建一个ASP.NET Core Web Application项目--Catcher.EasyDemo.Website

干掉Controllers文件夹。由于个人习惯问题,习惯性将Controller分离出来。

新建三个Class Library项目:

Catcher.EasyDemo.Controllers:剥离出来的Controller

Catcher.EasyDemo.DataAccess:数据访问

Catcher.EasyDemo.Models:模型

Controller项目需要添加MVC的引用:"Microsoft.AspNetCore.Mvc": "1.0.0"

在Controllers中添加HomeController,内容和生成的是一样的。然后在Website中添加引用,这里有

两种方式,一种是和平常一样的右键->添加引用,另一种是在project.json中的dependencies节点下

面添加 "Catcher.EasyDemo.Controllers": "1.0.0-*",然后就会自动restore,完成之后就能正常跑起

来了。(这里就不截图了)

下面的话,在Models中添加一个Product类:

Demo+在Linux下运行(CentOS7+dotnetcore sdk)
 1 namespace Catcher.EasyDemo.Models
2 {
3 public class Product
4 {
5 public int ProductId { get; set; }
6 public string ProductName { get; set; }
7 public string ProductSource { get; set; }
8 public decimal ProductPrice { get; set; }
9 }
10 }
Demo+在Linux下运行(CentOS7+dotnetcore sdk)

在DataAccess中添加ProductDataAccess类,用于数据交互,里面有用到dapper,所以要添加引用,

以及用到了读取json配置的方法,所以还要添加Microsoft.Extensions.Configuration的引用,同时还要添加Models的引用,方法上面已经说过了。

这里没有用一些复杂的东西,就一个单例模式和一些简单的数据库操作。

Demo+在Linux下运行(CentOS7+dotnetcore sdk)
  1 using Catcher.EasyDemo.Models;
2 using Dapper;
3 using Microsoft.Extensions.Configuration;
4 using System.Collections.Generic;
5 using System.Data;
6 using System.Data.SqlClient;
7 using System.IO;
8 using System.Linq;
9
10 namespace Catcher.EasyDemo.DataAccess
11 {
12 public sealed class ProductDataAccess
13 {
14 public static ProductDataAccess Instance
15 {
16 get
17 {
18 return Nested.instance;
19 }
20 }
21
22 class Nested
23 {
24 static Nested() { }
25 internal static readonly ProductDataAccess instance = new ProductDataAccess();
26 }
27
28 /// <summary>
29 /// get the connection string form the appsettings.json
30 /// </summary>
31 /// <returns></returns>
32 private string GetConnStr()
33 {
34 var builder = new ConfigurationBuilder();
35 builder.SetBasePath(Directory.GetCurrentDirectory());
36 builder.AddJsonFile("appsettings.json");
37 var config = builder.Build();
38 return config.GetConnectionString("dapperConn");
39 }
40
41 /// <summary>
42 /// open the connection
43 /// </summary>
44 /// <returns></returns>
45 private SqlConnection OpenConnection()
46 {
47 SqlConnection conn = new SqlConnection(GetConnStr());
48 conn.Open();
49 return conn;
50 }
51
52 /// <summary>
53 /// get all products
54 /// </summary>
55 /// <returns></returns>
56 public IList<Product> GetAll()
57 {
58 using (IDbConnection conn = OpenConnection())
59 {
60 string sql = @"SELECT [ProductId]
61 ,[ProductName]
62 ,[ProductSource]
63 ,[ProductPrice]
64 FROM [dbo].[Product]";
65 return conn.Query<Product>(sql).ToList();
66 }
67 }
68
69 /// <summary>
70 /// delete the product by product's id
71 /// </summary>
72 /// <param name="pid">id of the product</param>
73 /// <returns></returns>
74 public bool Delete(int pid)
75 {
76 using (IDbConnection conn = OpenConnection())
77 {
78 string sql = string.Format(@"DELETE FROM [dbo].[Product] WHERE [ProductId]={0} ", pid.ToString());
79 return conn.Execute(sql) > 0;
80 }
81 }
82
83 /// <summary>
84 /// add the product
85 /// </summary>
86 /// <param name="product">entity of the product</param>
87 /// <returns></returns>
88 public bool Add(Product product)
89 {
90 using (IDbConnection conn = OpenConnection())
91 {
92 string sql = string.Format(@"INSERT INTO [dbo].[Product]
93 ([ProductName]
94 ,[ProductSource]
95 ,[ProductPrice])
96 VALUES
97 ('{0}','{1}',{2})", product.ProductName, product.ProductSource, product.ProductPrice);
98 return conn.Execute(sql) > 0;
99 }
100 }
101 }
102 }
Demo+在Linux下运行(CentOS7+dotnetcore sdk)
然后在Controllers中添加一个ProductController,具体内容如下:
Demo+在Linux下运行(CentOS7+dotnetcore sdk)
 1 using Microsoft.AspNetCore.Mvc;
2 using Catcher.EasyDemo.Models;
3 using Catcher.EasyDemo.DataAccess;
4
5 namespace Catcher.EasyDemo.Controllers
6 {
7 public class ProductController : Controller
8 {
9 /// <summary>
10 /// Index
11 /// </summary>
12 /// <returns></returns>
13 public IActionResult Index()
14 {
15 return View(ProductDataAccess.Instance.GetAll());
16 }
17
18 /// <summary>
19 /// Add
20 /// </summary>
21 /// <returns></returns>
22 public IActionResult Add()
23 {
24 return View();
25 }
26 [HttpPost]
27 public IActionResult Add(Product product)
28 {
29 bool isOK = ProductDataAccess.Instance.Add(product);
30
31 if (isOK)
32 {
33 return RedirectToAction("Index");
34 }
35 else
36 {
37 TempData["err"] = "sorry!there were some errors!Please try again.";
38 return View();
39 }
40 }
41
42 /// <summary>
43 /// Delete
44 /// </summary>
45 /// <param name="pid"></param>
46 /// <returns></returns>
47 public IActionResult Delete(int pid)
48 {
49 bool isOK = ProductDataAccess.Instance.Delete(pid);
50
51 if (isOK)
52 {
53 return RedirectToAction("Index");
54 }
55 else
56 {
57 TempData["err"] = "sorry!there were some errors!Please try again.";
58 return View("Index");
59 }
60 }
61 }
62 }
Demo+在Linux下运行(CentOS7+dotnetcore sdk)
控制器的话,应该没有什么太多好说的,毕竟差别不会太大。
下面要做的就是添加视图和连接字符串。
先添加视图:添加一个Product文件夹,在这里存放相应的视图

添加Index.cshtml

Demo+在Linux下运行(CentOS7+dotnetcore sdk)
 1 @model IEnumerable<Catcher.EasyDemo.Models.Product>
2 @{
3 ViewData["Title"] = "Product Index";
4 }
5 <a asp-action="Add" asp-controller="Product">Add a New Product</a>
6 <div class="container">
7 <table class="table table-responsive">
8
9 <thead>
10 <tr>
11 <td>ID</td>
12 <td>Name</td>
13 <td>Price</td>
14 <td>Source</td>
15 <td>Opreation</td>
16 </tr>
17 </thead>
18
19 <tbody>
20 @foreach (var item in Model)
21 {
22 <tr>
23 <td>@item.ProductId</td>
24 <td>@item.ProductName</td>
25 <td>@item.ProductPrice</td>
26 <td>@item.ProductSource</td>
27 <td>
28 <a asp-action="Delete" asp-controller="Product" asp-route-pid="@item.ProductId">Delete</a>
29 </td>
30 </tr>
31 }
32 </tbody>
33 </table>
34 </div>
Demo+在Linux下运行(CentOS7+dotnetcore sdk)

视图与mvc用的法大致相同,不同就是TagHelper,不过大部分是一看就知道是什么意思,要做什么操作,也不做过多解释。

添加Add.cshtml
Demo+在Linux下运行(CentOS7+dotnetcore sdk)
 1 @model Catcher.EasyDemo.Models.Product
2 @{
3 ViewData["Title"] = "Add";
4 }
5 <div class="container">
6 <form asp-action="Add" asp-controller="Product" method="post">
7 <div class="form-group">
8 <label asp-for="ProductName">Name</label>
9 <input asp-for="ProductName" type="text" placeholder="enter the product name" />
10 </div>
11 <div class="form-group">
12 <label asp-for="ProductPrice">Price</label>
13 <input asp-for="ProductPrice" type="text" placeholder="enter the product price" />
14 </div>
15 <div class="form-group">
16 <label asp-for="ProductSource">Source</label>
17 <input asp-for="ProductSource" type="text" placeholder="enter the product source" />
18 </div>
19 <div class="form-group">
20 <button type="submit" class="btn btn-primary">Add Product</button>
21 </div>
22 </form>
23 </div>
Demo+在Linux下运行(CentOS7+dotnetcore sdk)
还要添加的是连接字符串,在appsettings.json中添加一个节点
1 "connectionStrings": {
2 "dapperConn": "server=127.0.0.1;database=nancydemo;user id=sa;password=123;"
3 }

当然,这是在本地的,放到linux时,需要替换成相应的ip

来一张项目截图:
Demo+在Linux下运行(CentOS7+dotnetcore sdk)
到这里,编码工作已经ok了,编译,发布即可

0x03、Linux下运行

这里没有采用jexus的方式部署,原因是想尝尝另外的方式。

在CentOS上安装dotnet core的方式可以看这里,就不在累赘了

安装好了之后,运行dotnet会提示

Demo+在Linux下运行(CentOS7+dotnetcore sdk)

确定dotnet core 安装成功之后,

就是把发布后的项目扔到CentOS中,习惯放到/var/www目录下面

进入到相应的目录,运行dotnet 网站对应的dll即可

Demo+在Linux下运行(CentOS7+dotnetcore sdk)

并且,在终端还能查看一系列的操作
 Demo+在Linux下运行(CentOS7+dotnetcore sdk)

总之,dotNET Core 用起来感觉不错

如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!