ASP.NET CORE 入门
本文最后更新于843 天前,其中的信息可能已经过时,如有错误请发送邮件到2192492965@qq.com

# ASP.NET CORE 入门

简介

作者:Daniel RothRick AndersonShaun Luttin

ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。

使用 ASP.NET Core,您可以:

  • 生成 Web 应用和服务、物联网 (IoT) 应用和移动后端。
  • 在 Windows、macOS 和 Linux 上使用喜爱的开发工具。
  • 部署到云或本地。
  • .NET Core 上运行。

创建Web项目

通过命令创建

  • 打开集成终端

  • 将目录 (cd) 更改为包含项目文件夹的文件夹。

  • 运行以下命令:

    .NET CLI复制

    dotnet new webapi -o TodoApi
    cd TodoApi
    dotnet add package Microsoft.EntityFrameworkCore.InMemory
    code -r ../TodoApi

    这些命令会:

    • 创建新的 Web API 项目,并在 Visual Studio Code 中打开它。
    • 添加下一部分所需的 NuGet 包。
  • 当对话框询问是否要将所需资产添加到项目时,选择“是”。

JetBrains Rider 创建

  • 点击文件>新建解决方案
  • 选择ASP>NETCore web应用程序
  • 选择SDK版本
  • 选择按类分组为Web API
  • 点击创建即可创建项目

Visual Studio创建

  • 从“文件”菜单中选择“新建”>“项目” 。
  • 在搜索框中输入“Web API”。
  • 选择“ASP.NET Core Web API”模板,然后选择“下一步”。
  • 在“配置新项目”对话框中,将项目命名为“TodoApi”,然后选择“下一步”。
  • 在“其他信息”对话框中:
    • 确认“框架”是“.NET 7.0”(或更高版本)。
    • 确认已选中“使用控制器(取消选中以使用最小 API)”。
    • 选择“创建”。

运行项目

进入项目后运行以下命令:

dotnet run

添加数据库(mysql)

  1. 安装下列第三方包
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools.DotNet
MySql.Data
MySql.EntityFrameworkCore
  1. 创建DB目录,在目录下创建IndexDB.cs在其中编写以下内容:
using Microsoft.EntityFrameworkCore;
using book.Model;
namespace book.DB;

public class IndexDb:DbContext
{
    public DbSet<UserModel> User { get; set; } // 添加模型链接

    public IndexDb(DbContextOptions<IndexDb> options) : base(options)
    {

    }
}
  1. 在根目录下的appsettings.json中添加以下内容:
"ConnectionStrings": {
    "DefaultConnection": "server=localhost;port=3306;database=book_db;user=root;password=12345678"
  }
  • 其中server为mysql运行地址,port 为mysql运行端口,database代表本项目链接的数据库名,user为mysql用户名,password为登录密码。
  1. 在Program.cs中添加以下内容:
using Microsoft.EntityFrameworkCore;

// 添加mysql数据库配置
builder.Services.AddDbContext<IndexDb>(options =>
{
    options.UseMySQL(builder.Configuration.GetConnectionString("DefaultConnection") ?? "");
});
  1. 在项目中创建Model文件夹,并创建模型文件(以下以用户表为例)

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Diagnostics.CodeAnalysis;
    using Microsoft.EntityFrameworkCore;
    
    namespace book.Model;
    
    [Table("user")]
    public class UserModel
    {
       [Key]
       public int Id { get; set; }
       [StringLength(16),Comment("用户名")]
       public string? Username { get; set; }
       [StringLength(512),Comment("用户密码")]
       public string? Password { get; set; }
    
       [Column(TypeName = "datetime")]
       public DateTime CreateAt { get; set; } = DateTime.Now;
       [Column(TypeName = "datetime")]
       public DateTime UpdateAt { get; set; }
    }
  2. 在终端中运行以下命令进行数据库迁移/链接:

dotnet ef migrations add <name> # 创建迁移文件
dotnet ef database update # 生成数据库表/同步数据库

添加控制器

在Controller文件夹中创建控制器,其中控制器命名应遵循以下规则:

  1. 控制器类的名称应该以Controller结尾。例如,如果你的控制器处理用户相关的操作,你可以将其命名为UserController
  2. 控制器类应该位于一个名为Controllers的文件夹中。这是为了组织和区分控制器类和其他类型的类。
  3. 控制器文件的扩展名应该是.cs(对于C#)或.vb对于VB.NET)。
  4. 控制器文件的命名应该与控制器类的名称相匹配。例如,如果你的控制器类名为UserController,那么控制器文件的名称应该是UserController.cs

示例:

using Microsoft.AspNetCore.Mvc;

using book.DB;
using book.ErrHandler;
using book.Model;

namespace book.Controllers;

[Route("/user")]
public class UserController: ControllerBase
{
    private readonly IndexDb _context;
    private readonly ErrTemplate _errTemplate;
    public UserController(IndexDb context)
    {
        ErrTemplate errTemplate = new ErrTemplate();
        _context = context;
        _errTemplate = errTemplate;
    }

    [HttpPost("login")]
    public Dictionary<string, object> Login(string username,string password)
    {
        var user = _context.User.FirstOrDefault(u=>u.Username == username);
        if (user == null)
        {
            return _errTemplate.UserDoesNotExist();
        }
        bool verified = BCrypt.Net.BCrypt.Verify(password, user.Password);
        if (verified)
        {
            return _errTemplate.Success("登录成功","");
        }

        return _errTemplate.UserPasswordError();
    }

    [HttpPost("reg")]
    public Dictionary<string, object> Register(string username, string password)
    {

        var user = _context.User.FirstOrDefault(u=>u.Username == username);
        if (user != null)
        {
            return _errTemplate.UserNameAlreadyExists();
        }

        var hashedPassword = BCrypt.Net.BCrypt.HashPassword(password);
        var userModel = new UserModel {Username= username,Password= hashedPassword};
        _context.User.Add(userModel);
        _context.SaveChanges();
        UserModel result;
        result = userModel;
        result.Password = "******";
        return userModel.Id>0 ? _errTemplate.Success("注册成功",userModel):_errTemplate.RegisterFailed();
    }
}

在C#中允许一个控制器类存在多个相同请求类型的接口

如果觉得本文对您有所帮助,可以支持下博主,一分也是缘?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
换装