ASP.NET+MVC入门踩坑笔记 (一) 创建项目 项目配置运行 以及简单的Api搭建


哈喽各位 我又回来了!

前段时间研究了下ASP.NET,刚开始也是随便找网上的各种教程来看,但是鉴于本人技术有限,还是走了相当长的一段弯路的.所以我写下了这篇文章.希望各位刚刚入坑的ASP.NET开发者们能够少走弯路,专业的开发者也请给予指点,谢谢各位了.

PS:本人没有系统地学过ASP.NET(因为我是学生党55555)以及.NET知识,也是通过探索略知一二,文中可能不准确的表达和术语,恳请大佬们指正.

 

好了 正片开始喽

 

#1 从创建项目说起

阅读本章节 , 你将了解到 :

-如何在VS配置ASP.NET环境

-如何创建一个基本的ASP.NET项目

如果各位学习过 C# , 就一定知道 VS 是什么东西,即 Visual Studio , 本机演示版本为 2022 . ASP.NET 要求微软提供的 .NET Core 框架与 SDK . 你可以直接在 Visual Studio Installer 里面找到 ASP.NET 和 Web 开发 , 直接勾选它们并且安装即可 .

下载安装后 , 你就可以在"创建新项目"时找到 ASP.NET模板了.

我们这里使用 MVC Api 框架 , 所以选择 ASP.NET Core Web Api .

如果你正在使用 vs2019 , 那么你需要创建的是 ASP.NET Core 应用程序 , 并且在创建项目后弹出的对话框内选择 Api . 

(当然 , 如果你要选择另一个带有 MVC 的也可以)

框架版本什么的可以自己选 , 个人喜欢 .NET 3.1 Core . 当然 , 如果你要用顶级语句等高版本 C# 才支持的功能 , 那么 .NET 6.0 请.

配置 HTTPS 的话视具体情况而定 . 个人喜欢关掉 .

万事俱备以后 , 点击"创建" , 一个新的 ASP.NET 项目就 duang 的一下诞生了 !

 

#2 配置调试器 , 以及编译/执行文件方面的说明

阅读本章节 , 你将了解到 :

-如何使用命令行调试ASP.NET应用程序

-如何启动ASP.NET应用程序

-如何允许外网访问Api

 

关于调试 : 

大家可能已经看到 , VS2019 与 VS2022 对 ASP.NET 项目的默认调试配置是 "IIS Express". 这确实是微软所推荐的调试 ASP.NET 应用程序的最佳选项 , 但是经过一段时间的使用 , 我的感受只能用三个字来概括 : "糟透了" .

首先 IIS Express 默认是不提供命令窗口的 , 这意味着你无法查看你的程序用 Console.WriteLine() 所输出的日志 .

其次 , IIS Express 对性能并不友好 . 本人使用的是渣机 , 因此不知道中高端机器的 IIS Express 是否也受到此问题的困扰 : 点击调试以后 , IIS Express 和浏览器窗口确实第一时间启动了 , 但是从它开始启动到能够正常调试 , 几乎需要加载两分钟 ! 而如果直接双击生成的 exe 文件执行 , 从启动到服务状态只需要5秒左右 .

最后 , 也是我放弃 IIS Express 的原因 , 我有一次使用 IIS Express 调试时 , 发现无法启动 IIS Express 了 , 并且给了我一个报错 : "尝试启动 IIS Express时出现以下问题" . 没错 , 就那么一个提示框 , 上面也只有这么几个字 . 至于它所说的 "以下问题" , 我这辈子可能都不会知道了 . 尽管重装系统后发现这个问题解决了 , 但是我已经对其产生了抵触 .

好了 , 说了那么多 , 接下来就讲讲如何将调试程序设置为直接启动 exe 程序吧 . (喜欢IIS Express的同志们忽略即可)

首先我们点击调试框右侧的箭头 , 展开调试菜单 . 然后点击 "[项目名称] 调试属性" 进入配置文件编辑页面.如下图

接着 , 新建一个 "项目" 类型的配置文件 , 命名可以随意 (社交牛逼症狂喜) .


而后 , 将页面滚动到下侧 , 勾选 "启动浏览器" 并将 URL 修改为 http://localhost:5000 . 如下图

(关于为什么使用 5000 端口 : IIS Express 所指定的端口并不是 5000 , 但是如果你使用命令行方式启动编译后的程序 , 其默认分配的端口即是 5000 端口 (Now listening on localhost:5000) .

如果 5000 端口被占用了 , 可以设置命令行参数 "-urls http://*:[可用的端口号]" , 端口号可以视具体情况而定 . 下面的启动浏览器 URL 中的端口号也要一起改 . )

最后 , 如下图 , 在配置文件菜单选择刚刚创建的配置文件 , 就可以通过快捷按钮启动命令行方式的调试啦 !

 

关于编译出来的程序 : 

大家可能已经试过了 , 调试时 , 你没有办法从局域网内通过 IP+端口的方式访问正在运行的 Api . 实际编译出来的程序也是如此 , 初始状态下只能从 localhost , 也就是本机进行访问 , 如果你从外部访问 , 就会出现 "xxx拒绝了我们的连接" . 那么 , 如何解决这个问题 , 使得来自所有 IP 的设备来访问已经编译完成的 Api 呢 ?

解决方案有很多种 . 

其一就是通过 IIS 部署 Api , 这也是比较主流的方式 , 比较适合需要多次更新应用程序以及有一个集中管理后台的开发者们 . 网上这方面的文章很多 , 但是如果你自己配置 , 并且不太懂 IIS 的运行原理 , 那么就很有可能配置出错 (反正我是直接用不了 , 所以就不多介绍这个方法) .

其二就是给 .NET 添加启动参数 , 这里着重介绍一下 .

首先把你的整个编译后输出的文件夹拷贝到你的服务器上 (本地打开也可以) , 然后检查你的 .NET 版本 . 特别要注意 , 服务器上要预先安装好与项目目标平台的 .NET Core for Servers.

然后用 cmd 定位到目录下 , 执行

dotnet [项目名称].dll --urls http://*:[端口号]

比方说我的项目的 dll 文件是 project.dll , 文件位于 C:\wwwroot\project.dll , 需要部署到 5000 端口 , 那么我就应该执行

cd C:\wwwroot\
dotnet project.dll --urls http://*:5000

当然你如果嫌这样太麻烦 , 你也可以写一个 cmd 脚本 (批处理文件) 来执行命令 .

如下图 , 出现了运行提示 , 就是成功了 .

如果你发现报错 "'dotnet' 不是内部或外部命令,也不是可运行的程序或批处理文件。" 或者是一个带链接的运行库错误 , 那么需要去微软官网下载对应版本的 .NET Core 运行库 , 记得一堆要下载服务器 (Server) 版本的 , 就是旁边带 "Run Server Apps" 的包 .

微软 .NET 官网 : 点击前往

 

#3 配置 API 路由 , 创建不带参数的 GET 方法

阅读本章节 , 你将了解到 :

-如何配置ASP.NET MVC路径

-如何创建基本的ASP.NET接口

-如何通过浏览器调试基础的ASP.NET项目

-控制器(Controller)该如何使用

 

项目创建好了 , 接下来就是开始敲代码咯 (激动) .

来到 VS 右侧的解决方案资源管理器 , 展开 Controllers文件夹 , 这里用于存放你的 Api 控制器 , 借助控制器 , 你才能通过类似 localhost:5000/api/core/method 的 URL 访问到你的 Api 方法 . 在以上链接中 , core 就是你的控制器名称 , 而后面的 Method 则是方法名称 .

控制器文件的名称以及文件内控制器的名称可以随意更改 , 建议二者保持一致 . 

另外 , 这里要特殊强调的是 , 控制器名称末尾必须带有 Controller 字样 . 并且应当添加继承 ":ControllerBase" , 如下图所示 .

其中 , Api 是控制器名称 .

当然你可能也注意到了 , 在控制器上面还有一行 Route 代码 , 这也就是我们所说的路由设置 .

那么什么是路由设置呢 ? 举这样一个例子 : 假如控制器 Api 下有一个 Index() 方法 , 如下所示设置路由

[ApiController]
[Route("[controller]/[action]")]
public class ApiController : ControllerBase
    {
        [HttpGet]
        public ActionResult<string> Index()
        {
            return "Hello world!";
        }
    }

此时 , 路由就是 [controller]/[action] . 假使应用程序在 localhost:5000 运行 , 请问 , 我该如何访问 Index() 方法并得到返回值 "Hello world!" 呢 ? (无奖竞猜)

没错 , 我们应该访问 localhost:5000/Api/Index

值得一提的是 , 控制器以及后面要讲的参数和原生 C# 不同 , 它们对大小写不敏感 , 例如 Api 和 api 在实际上是同一个控制器 , 而以下写法:

localhost:5000/api/Index

localhost:5000/Api/Index

localhost:5000/Api/index

localhost:5000/api/index

对于 ASP.NET 控制器而言 , 这些写法指向的控制器以及方法都是一致的 , 都是位于 Api 或 api 控制器下的 Index() 或 index() 方法.

我们再次设置路由 , 如下 :

[ApiController]
    [Route("api/[controller]/[action]")]
    public class ApiController : ControllerBase
    {
        [HttpGet]
        public ActionResult<string> Index()
        {
            return "Hello world!";
        }
    }

好了 , 这次你知道应该如何访问 Index() 方法了吗 ?

正解 : localhost:5000/api/Api/Index

如上 , 前面的一个 api 是既定的路径 , 后面的 Api 代表 Api 控制器 , 而 Index() 表示该控制器下的 Index() 方法 .

return 语句在这里就是返回值 , 即显示在浏览器上的信息 .

[HttpGet] 语句定义了 Index() 是一个 GET 类型的 HTTP 协议 Api

同理 , 我们来制作一个简单的用于获取时间的 Api .

using System;
using Microsoft.AspNetCore.Mvc;//MVC框架

namespace ApiDemo.Controllers
{
    [ApiController]//声明控制器
    [Route("api/[controller]/[action]")]//设置路由
    public class ApiController : ControllerBase//定义Api控制器
    {
        [HttpGet]//使用GET HTTP方法
        public ActionResult<string> GetTime()//定义方法
        {
            return DateTime.Now.ToString();//调用System.DateTime.Now获取当前时间并输出
        }
    }
}

到此为止 , 一个简单的 ASP.NET 应用程序就制作完成啦 .

我们尝试运行一下 .

成功了 !

 

#4 预告

下篇文章中 , 我们会谈到 :

-如何创建带参数的 Api

-如何搭建 POST Api 并且接收发送过来的值

-如何在 ASP.NET 程序中连接 MySQL 数据库并且执行操作

(虽然也不知道什么时候才会更)

文章来源:https://www.cnblogs.com/fengye1003/p/aspdotnet_mvc_01.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:使用.NET 6开发TodoList应用(21)——实现API版本控制
下一篇:Xamarin.Forms 复制本地SQLite数据库
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

ASP.NET+MVC入门笔记 () 创建项目 项目配置运行 以及简单Api
ASP.NET MVC快速入门
Xamarin.Android
C# asp.net mvc 创建虚拟目录
C# Abp框架入门系列文章(
VS调试运行ASP.NET MVC项目,上传静态资源图片404问题,Debug路径
《步步入门》 .NET 6 部署到Linux
.net core mvc项目中JSON统一处理
.Net Minimal API 介绍
ASP.NET Core MVC路由约束
C# ASP.NET Core开发学生信息管理系统(
ASP.NET Core MVC 在过滤器ActionFilter中保存页面生成html静态页面文件
使用node启动本地项目本地服务器
OrchardCore Headless
《步步入门》.NET6在Linux下以守护进程方式运行
Elasticsearch使用系列-ES简介和环境
.Net Core 5.x Api开发笔记 -- 基础日志(Log4Net)(八)
Asp.NetCore3.1开源项目升级为.Net6.0
asp.net - 在 ASP.NET Core MVC 中嵌套 TagHelper
ASP.NET Core web API中使用Swagger/OpenAPI(Swashbuckle)

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS S/4HANA SAP GUI SAP HANA SAP R/3 SAP入门 SAP版本 ERP SAP SAP MM 库存管理 物料管理 采购管理 入门教程 SAP S/4HANA SPRO 企业结构 采购组织 MM01 物料主数据 物料类型 BP分组 业务伙伴 供应商主数据 ME41 RFQ 库存物料 采购流程 ME51 消耗性物料 科目分配 采购申请 AC03 ML81N 外部服务 服务主数据 Business Partner SAP培训 ME51N MM模块 Lean Services MM-SRV 外部服务采购 PIR 供应来源 采购主数据 采购信息记录 ME31K 框架协议 计划协议 采购合同 ME01 供应来源确定 货源清单 MEQ1 供应源确定 配额安排 配额评分 MD04 MD21 MRP 计划文件 需求计划 批量程序 MD01N MD02 MRP Live MD05 MM 物料计划 优化采购 供应源 采购订单 ME2A 供应商确认 采购监控 Flexible Workflow 凭证释放 采购审批 释放策略 实地盘点 物料凭证 货物移动 MIGO 收货 移动类型 已撤回 供应商退货 货物发出 STO 库存转储 转移过账 生产订单 预留 GR/IR MIRO 供应商发票 物流发票校验 OMR2 税码 FI PP SD 实操教程 MRBR OMR6 发票差异 交货成本 后续借记 MI01 实物盘点 盘点差异 公司代码 工厂 组织结构 OMS2 主数据定制 自动科目确定 BP角色 CVI 伙伴确定 编号范围 凭证类型 字段选择 FBN1 OMBT OMC2 会计凭证 OMJJ BOM 委外加工 项目类别L MRKO 供应商寄售 特殊库存K MRKON PIPE Pipeline 特殊库存P ERS MRIS 发票计划 周期性结算 里程碑付款 变更追踪 版本管理 采购凭证 SFTP WebDAV 网盘 飞牛fnOS AMPL HERS MPN 中文教程 库存确定 可用性检查 缺件检查 Output Management 消息确定 输出确定 分割评估 库存计价 评估类别 评估类型 PB00 RM0000 条件技术 采购定价 MM-FI集成 OBYC 库存估价 文本类型 文本采用 EFB EVO MSV SU3 用户参数 发票校验 合同参照 履约保留款 特别总账 预付款 Fiori Launchpad SAP Fiori 应用导航 用户体验 LSMW LTMC Migration Cockpit 数据迁移 BRFplus OPD Output Control My Inbox 审批流程 灵活工作流 SAP PP 外部加工 SAP QM 检验批 质量信息记录 采购收货 SAP PM 维护BOM 维护订单 SAP SD SAP Service 端到端流程 MM模块培训 FI-MM集成 供应商管理 审批配置 FICO入门 SAP FICO 财务配置 供应商税务 预扣税 House Bank 银行对账 客户清账 应收账款 FI控制 验证与替代 印度 GST 税务配置 F110 FBZP EWM入门 SAP EWM 仓库管理 OX14 成本核算 物料评估 后勤配置 物料组 价值更新 数量更新 PP-PI 流程制造 生产计划 容差配置 SAP事务码 SAP基础 TCODE Basis 事务代码 MMNR 编号区间 采购实操 组织架构 OMSF SAP实操 FI配置
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码