• 6.1 ASP.NET Core Web 入门


    6.1 ASP.NET Core Web 入门

    ASP.NET Core中,严格来讲只有一个Asp.net Core MVC一个框架,Asp.net Core MVC既支持基于视图的MVC开发,也支持Web API和Razor Pages开发。

    ASP.NET Core MVC项目

    在VS2022中,一定选择ASP.NET Core Web应用(模型-视图-控制器)项目模板

    项目中wwwroot文件夹包含图片、JS、CSS等静态文件,Models、Views、Controllers是与MVC相关的文件夹,appsetting.json是默认配置文件,program.cs为入口代码

    MVC模式包括:模型、视图和控制器三部分,视图负责展示内容,也就是html网页;控制器负责处理用户的请求和为视图准备数据;模型负责在视图和控制器之前传递数据。

    MVC约定:

    MVC中,控制器由Controller类实现,视图一般为*.cshtml文件,模型则是C#中的普通类。

    控制器的名字一般以Controller结尾,并放在Controllers文件夹下

    视图一般放到Views/控制器名称文件夹下

    模型则放在model文件夹下

    工作过程

    浏览器提交的请求会被封装到模型类的对象中,然后传递给控制器,控制器对其进行处理后将结果放到模型类的对象中再传给视图,视图则解析模型对象渲染成HTML输出给浏览器。

    案例:

    1. 在Models文件夹下创建一个类

    public record Person(string Name, bool IsVIP, DateTime CreatedTime);

    1. 在Controllers文件夹下创建一个继承自Controller类的TestController类
    public class TestController : Controller
    {	//控制器类中被外界直接访问的方法叫做操作方法
         public IActionResult Demo1(int a) //返回类型为IActionResult
         {
             var model = new Person("Zack", true, new DateTime(1999, 9, 9));
             return View(model);//将model对象传递给与操作方法同名的View
         }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 在views文件夹中创建Test子目录,然后再Test子目录中添加视图,视图名称为Demo1.cshtml
    @model MVC项目1.Models.Person
    <div>姓名:@Model.Namediv>
    <div>@(Model.IsVIP?"VIP":"普通会员")div>
    <div>注册时间:@Model.CreatedTimediv>
    
    • 1
    • 2
    • 3
    • 4

    @model MVC项目1.Models.Person:视图文件是接收Person类数据的强类型视图

    以@开头的代码后面跟C#语句,这种代码叫做服务器端代码

    我们在访问…/Test/Demo1地址时,框架会寻找名为TestController类中的Demo1方法来处理用户的请求,运行该操作方法,则会将view渲染成HTML输出给浏览器

    ASP.NET Core Web API

    MVC开发的系统一般是在浏览器中查看,而目前访问服务器的客户端已不仅仅是浏览器了,很多客户端和服务器之间一般都是使用JSON结构来传递数据,所以需要将数据进行结构化,执行结构化操作的服务叫做Web API。

    ASP.NET Core Web API与MVC的项目目录结构相似,但是没有Views和Models文件夹,因为Web API直接返回的是结构化数据,不需要提供展示数据的视图。

    样板代码WeatherForecastController,继承自ControllerBase类,MVC中Controller类同样是继承自ControllerBase,Controller类中多了View和MVC中视图相关的代码。

    	[ApiController] //Web API都要加
        [Route("[controller]")] //设定路由,[controller]代表控制器的名字,在这里是WeatherForecast
    							//表示对/WeatherForecast路径的请求由WeatherForecastController来处理
        public class WeatherForecastController : ControllerBase
        {
    		//当对/WeatherForecast路径发送Get请求时由该方法Get处理
            [HttpGet(Name = "GetWeatherForecast")]
            public IEnumerable<WeatherForecast> Get()
            {...
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Post Put等方法

    先增加一个类SaveNoteRequest,然后在WeatherForecastController中增加一个SaveNote方法,并设定[HttpPost]

    public record SaveNoteRequest(string Title, string Content);
    
    [HttpPost]
    public string SaveNote(SaveNoteRequest req)
    {
        string filename = $"{req.Title}.txt";
        System.IO.File.WriteAllText(filename, req.Content);
        return filename;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    可以在自带Swagger页面中进行调试查看结构数据,注意只有勾选[启用OpenAPI支持]才会生成一个接口定义浏览界面

  • 相关阅读:
    数据链路层重点协议
    能自动更新的万能周报模板,有手就会用!
    【洛谷】P1828 [USACO3.2] 香甜的黄油 Sweet Butter (最短路)
    【Kotlin基础系列】第6章 包与导入
    Vue+AntDesignVue实现a-tree树形组件的层级选中功能
    什么?“裸辞”一个月拿到13家offer,网友:你是在找存在感吗···
    增量模型和迭代模型的优点与缺点
    在window和linux下如何对sd卡或者u盘分区、删除分区等操作
    时空数据挖掘三(城市计算)
    C# List
  • 原文地址:https://blog.csdn.net/weixin_44064908/article/details/126353278