diff --git "a/\350\256\270\346\265\267\346\200\241/\344\273\243\347\240\201/Linux\347\273\203\344\271\240.md" "b/\350\256\270\346\265\267\346\200\241/\344\273\243\347\240\201/Linux\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..1b02f9029c2aaf15e2cf9a9bac90ea72119c0bf7 --- /dev/null +++ "b/\350\256\270\346\265\267\346\200\241/\344\273\243\347\240\201/Linux\347\273\203\344\271\240.md" @@ -0,0 +1,306 @@ +### 任务4: +``` +1.查看当前目录下的文件和文件夹 + 命令:ls + 2.查看当前路径 + 命令:pwd + 3.创建一个新的文件夹 + 命令:mkdir 文件夹名 + mkdir 作业代码.html + 4.删除一个文件夹 + 命令:rmdir 文件夹名(注意:只能删除空文件夹) + 5.移动或重命名文件/文件夹 + 命令:mv 文件名称 目标未知文件名称 + mv Beast.html 代码 + 6.复制文件 + 命令:cp 源文件 目标路径 + cp Beast.html 许海怡 ——(许海怡文件夹被复制到代码文件夹中) + 7.删除文件 + 命令:rm 文件名 + rm 许海怡 + 8.查看文件内容 + 命令:cat [文件名] + cat Linux练习.md ——(一堆奇奇怪怪的文字) + 9.分页查看文件内容 + 命令:less [文件名] + less Index.cshtml + 10.查找文件 + 命令:find / -name [文件名] + find /许海怡/代码 -name "Beast.html"——(无效开关) + 11.查看文件权限 + 命令:ls -l [文件或目录名] + ls -l 代码 + 12.改变文件权限 + 命令:chmod [权限] [文件或目录名] + chmod user,u 代码————/usr/bin/chmod: invalid mode: ‘user,u’ +Try '/usr/bin/chmod --help' for more information. + 13.改变文件所有者 + 命令:chown [新所有者] [文件或目录名] + chown all 代码 ————/usr/bin/chown: invalid user: ‘all’ + 14.查看当前登录用户 + 命令:whoami + whoami————laptop-nh8nqpnq\34752 + 15.查看系统运行时间和平均负载 + 命令:uptime + 会出现像这样的12:34:56 up 2 day, 3:45, 2 users, load average: 0.00, 0.01, 0.05 + 16.查看磁盘使用情况 + 命令:df -h + 会出现Filesystem Size Used Avail Use% Mounted on +D:/Git 821G 25G 796G 3% / +C: 120G 120G 299M 100% /c +E: 58G 2.3G 56G 4% /e + 17.查看当前路径下的隐藏文件 + 命令:ls -a + 18.创建一个空文件 + 命令:touch [文件名] + touch dirt。html + 19.查看当前系统的内核版本 + 命令:uname -r + 3.4.10-bc1f6498.x86_64 + 20.查看网络连接状态 + 命令:ifconfig 或 ip addr + 21.安装一个软件包 + 命令:sudo apt-get install [软件包名] + sudo apt-get install htop + 22.卸载一个软件包 + 命令:sudo apt-get remove [软件包名] + sudo apt-get remove htop + 23.更新软件包列表 + 命令:sudo apt-get update + sudo apt-get update htop +``` +### MVC练习 +``` +创建一个控制台项目,没有任何选项,体会项目名称和什么有关系 +dotnet new console + +创建一个控制项目,项目名称Blog + public IActionResult Hello() + { + return View(); + } +创建一个控制台项目,输出到Blog目录 +dotnet new console -o Bolgs +创建一个MVC项目,指定项目名称 +dotnet new sln -o FaceBook +创建一个MVC项目,指定输出目录 +dotnet new sln -n FaceBook +创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目” +dotnet new sln -o FaceBook +dotnet new mvc -o src/Face.Web +dotnet new classlib -o src/Face.Core(类库项目) +dotnet new classlib -o src/Face.Domain(类库项目) +dotnet new classlib -o src/Face.Application(类库项目) +【创建的解决方案与项目啥的都没关系】 +想要解决方案管理它旗下的项目——dotnet sln add .\src\Face.Domain\ +dotnet sln add .\src\Blog.Face.Domain\ +dotnet sln add .\src\Blog.Face.Application\ +创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图 +先在Views Home里手动创建一个Ok.cshtml文件 +再在HomeController中 +public IActionResult Ok(){ + return View(); + } +创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” +在作业截图里面练习7 +给第8题的新控制,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野” +在作业截图里面 +给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面 +截图里 +新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id +截图id +先在Views 创建一个Products 再在这里手动创建一个Edit.cshtml文件 +再在HomeController中 + public IActionResult Edit(int id) + { + ViewBag.Id = id; + return View(); + } +在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 +public class Students + { + public required string Name { get; set; } + public int Age { get; set; } + public double Height { get; set; } + } + + +``` + +### 专项练习-控制器传参 +``` +简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 +public class Index{ +public int Id { get; set; } +} +简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 + public string Index_2(int id) + { + return id.ToString(); + } +简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 +public class Index_3{ +public string Name { get; set; } +} +复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 + public class Create{ +public string Title{get;set;}=null!; +public string Author{get;set;}=null!; +public string Content{get;set;}=null!; +} + +PS BlogCreateDto类型具有Title、Author、Content自动属性 + +复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_1的Action,并且传递一个Products类型的值,productCreateDto为变量名 + public class Create_1{ +public string Title{get;set;}=null!; +public string Author{get;set;}=null!; +public string Content{get;set;}=null!; +} + +PS Products类型具有Name、Price、Stock自动属性 + +复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_2的Action,并且传递一个Students类型的值,studentCreateDto为变量名 +public class blogCreateDto_2{ +public string Title{get;set;}=null; +public string Author{get;set;}=null; +public string Content{get;set;}=null; +} +PS Students类型具有StudentName、Sex、Age自动属性 + + +``` +### 专项练习-基础能力 +``` +生成一个随机整数,范围[0,100],注意是否包含 + public int Beast (int min, int max) + { + Random random = new Random(); + int number = random.next(0,101); + } +生成一个随机整数,范围(0,100],注意是否包含 +int number2 = random.Next(1, 100); +生成10个随机整数,范围[5,80],注意是否包含 +int[] numbers3 = new int[10]; +for (int i = 0; i < numbers3.Length; i++) +{ + numbers3[i] = random.Next(5, 81); +} +定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 +string chineseCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +Random random = new Random(); +string oneChineseCharacter = chineseCharacters[random.Next(chineseCharacters.Length)]; +定义一个字符串,字符串中有100个中文字符,需要从中随机取5-50个字符,组成新的字符 +int length = random.Next(5, 51); +StringBuilder sb = new StringBuilder(); +for (int i = 0; i < length; i++) +{ + sb.Append(chineseCharacters[random.Next(chineseCharacters.Length)]); +} +string fiveToFiftyChineseCharacters = sb.ToString(); +定义2个字符串,第一个字符串中放百家姓,第二个字符串中放中文字符,要求从第一个字符串随机取得一个姓,再从第二个字符串中随机获得1到2个字符组成新字符串,和第一个字符串取得的姓组成一个姓名 +string surnames = "啊诶与诶哦股鹅肉诶二米课次都进入哦了诶而已瑟吉欧"; +string givenNames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +int surnameIndex = random.Next(surnames.Length); +string surname = surnames[surnameIndex].ToString(); +int givenNameLength = random.Next(1, 3); +StringBuilder givenNameSb = new StringBuilder(); +for (int i = 0; i < givenNameLength; i++) +{ + givenNameSb.Append(givenNames[random.Next(givenNames.Length)]); +} +string givenName = givenNameSb.ToString(); +string name = surname + givenName; +利用以上方法,随机生成100个BlogCreateDto类型(有Title、Author、Content属性)的对象,其中的内容都是随机生成且长度不定,并将其渲染到视图 + +```public class EndController : Controller + { + [HttpGet] + public IActionResult Editone(int id) +{ + var list=new List{ + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }, + + new(){ + Title="你今天开心吗", + Author="佚名", + Content="你觉得呢", + }; + return View(list); + } +} + } +### 专项练习-控制器返回值 +``` +渲染简单数据到页面 +public IActionResult CollectionView() +{ + CollectionViewModel model = new CollectionViewModel + { + Items = new List { "Item1", "Item2", "Item3" } + }; + return View(model); +} +渲染复杂数据到页面 +public IActionResult CollectionView() +{ + CollectionViewModel model = new CollectionViewModel + { + Items = new List { "Item1", "Item2", "Item3" } + }; + return View(model); +} +渲染集合数据到页面 +public IActionResult CollectionView() +{ + CollectionViewModel model = new CollectionViewModel + { + Items = new List { "Item1", "Item2", "Item3" } + }; + return View(model); +} +``` \ No newline at end of file diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/OK+\345\215\207\347\272\247\351\242\204\345\210\244.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/OK+\345\215\207\347\272\247\351\242\204\345\210\244.png" new file mode 100644 index 0000000000000000000000000000000000000000..46bb7590ddaaa6d2c6ea3376011c215a11840ad3 Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/OK+\345\215\207\347\272\247\351\242\204\345\210\244.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/id\346\216\245\346\224\266.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/id\346\216\245\346\224\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..6930ef6a2fffa44b12bd22c79933d55b2c9b2351 Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/id\346\216\245\346\224\266.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/index_2.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/index_2.png" new file mode 100644 index 0000000000000000000000000000000000000000..80bd3bb5f0cf4f5b31cd09685ca503856e2317f2 Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/index_2.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/index_3.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/index_3.png" new file mode 100644 index 0000000000000000000000000000000000000000..9c40fea9d5fed3d0c429fca3723f00a745e9d7f6 Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/index_3.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/list.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/list.png" new file mode 100644 index 0000000000000000000000000000000000000000..ae044d76eab1c1d557e36f7843a487c9bc6e948d Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/list.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/string name.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/string name.png" new file mode 100644 index 0000000000000000000000000000000000000000..72729952aa74ac91f4e94c5192fecf786cc0a84c Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/string name.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/student.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/student.png" new file mode 100644 index 0000000000000000000000000000000000000000..56fa54c9b46930e72051dbdb2a85ebe78cca2e5e Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/student.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/\351\241\266\347\272\247\346\211\223\351\207\216.png" "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/\351\241\266\347\272\247\346\211\223\351\207\216.png" new file mode 100644 index 0000000000000000000000000000000000000000..29070989acdc960fefd7ec212442b2a7f6684510 Binary files /dev/null and "b/\350\256\270\346\265\267\346\200\241/\344\275\234\344\270\232\346\210\252\345\233\276/\351\241\266\347\272\247\346\211\223\351\207\216.png" differ diff --git "a/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/\345\210\233\345\273\272MVC\351\241\271\347\233\256.md" "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241114-\345\210\233\345\273\272MVC\351\241\271\347\233\256.md" similarity index 67% rename from "\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/\345\210\233\345\273\272MVC\351\241\271\347\233\256.md" rename to "\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241114-\345\210\233\345\273\272MVC\351\241\271\347\233\256.md" index e9884c3cf9fa0decf8cbd128da1422b42bb9c770..f076c429364556008214b437173043d97c2da217 100644 --- "a/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/\345\210\233\345\273\272MVC\351\241\271\347\233\256.md" +++ "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241114-\345\210\233\345\273\272MVC\351\241\271\347\233\256.md" @@ -29,6 +29,16 @@ dotnet new sln //已成功创建模板“解决方案文件”。 cd .\项目名\ //进入项目目录 dotnet run //运行项目 +创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目” +dotnet new sln -o FaceBook +dotnet new mvc -o src/Face.Web +dotnet new classlib -o src/Face.Core(类库项目) +dotnet new classlib -o src/Face.Domain(类库项目) +dotnet new classlib -o src/Face.Application(类库项目) +【创建的解决方案与项目啥的都没关系】 +想要解决方案管理它旗下的项目——dotnet sln add .\src\Face.Domain\ +dotnet sln add .\src\Blog.Face.Domain\ +dotnet sln add .\src\Blog.Face.Application\ 访问网址链接出现制作的网站 ``` diff --git "a/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241115-\346\211\223\345\214\205\344\270\212\344\274\240.md" "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241115-\346\211\223\345\214\205\344\270\212\344\274\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..4b774ea4685778ac1bb90875a414abcc476a287c --- /dev/null +++ "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241115-\346\211\223\345\214\205\344\270\212\344\274\240.md" @@ -0,0 +1,30 @@ +``` +在项目名下创建一个文件————mkdir .\项目名\需创建的文件名 +在文件下创建一个项目————dotnet new mvc -o .\项目名\文件名\项目名.文件之下的项目名(在windows和linux中用/来做分隔符) +dotnet sln add .\项目名\add .\项目名\文件名\ + +home下文件的名称来源于控制项目中方法的名称 + +创建后缀为.cs项目时 +第一步引入命名空间(引入命名空间之前,需要引用对应包或者库 + +using Microsoft.AspNetCore.Mvc; + + namespace Practice.Controllers; + + public class ProductsController : Controller +{} + +ProductsController与Controllers下文件的名称是有一定关系的一般情况下这两是一致的 +``` +``` +如何改端口号:在properties的jiso后缀文件中找到——profiles{applicationUrl} +ctrl +r可以结束 +端口一般在0-65535,系统保留端口0-1000 +``` +``` +打包 dotnet publish +拷贝 scp.路径在172.16.90.250和ikuai中例如(.\bin\Release\net8.0\publish\*root@域名:/var/www/域名路径) + +安装SDK +``` \ No newline at end of file diff --git "a/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241119-\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241119-\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..0d0fb6c2d18645670d8126e693f948fd9cfb399a --- /dev/null +++ "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241119-\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" @@ -0,0 +1,25 @@ +``` +将一个ASP.Net Core MVC 部署分几步 +1.将程序扔到服务器 +a打包程序 +b使用一些工具将打包好的程序传到服务器 +2.安装dotnet运行时 +在Debian这个Linux发行版本安装sdk或者运行时 +安装方式有——1包管理器:下载一个文件,将文件安装,更新软件源,安装sdk +2二进制文件 +3编译安装 +``` +``` +action本质上其实是一个方法,方法的签名、三要素——函数名、参数、返回值。 +简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 +public class Index{ +public int Id { get; set; } +} + +传递到my workspace上 +public IActionResult Edit([FromBody]变量名 obj){ + return Content (obj.Nickname) +} + + +``` \ No newline at end of file diff --git "a/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241120-\345\220\257\345\212\250\351\205\215\347\275\256.md" "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241120-\345\220\257\345\212\250\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..e715d8e9e1898927bbb099a792e74f6481dddf2e --- /dev/null +++ "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241120-\345\220\257\345\212\250\351\205\215\347\275\256.md" @@ -0,0 +1,23 @@ +``` +当用户访问 `http://localhost:5000/Home/Index/5` 时: +1. **控制器**: 匹配到 `HomeController`。 +2. **操作方法**: 匹配到 `Index` 方法。 +3. **参数**: 路由参数 `id` 的值为 `5`,并传递到 `Index` 方法中。 + +在路由模式中,`{id?}` 定义了一个可选参数,其名称为 `id`。控制器方法的参数名必须与此占位符一致,例如: +如果路由模式为 `{productId?}`,则方法参数名应为 `productId`。 + + 参数名不匹配时,将导致请求无法正确解析参数。 + 在路由模式中, `{id?}` 表示一个可选的URL参数,占位符名称为 `id`。在控制器方法中,参数名称也必须与占位符名称匹配,即 `id`。如果路由模式中使用了其他参数名,例如 `{productId?}`,那么控制器方法中的参数名也应相应更改为 `productId`。 + 路由模式 `"{controller=Home}/{action=Index}/{id?}"` : + 允许通过 URL 直接访问控制器和方法。 +参数名需要与占位符一致,避免请求解析问题。 +在路由模式中,`{id?}` 定义了一个可选参数,其名称为 `id`。控制器方法的参数名必须与此占位符一致,例如: +如果路由模式为 `{productId?}`,则方法参数名应为 `productId`。 + +参数名不匹配时,将导致请求无法正确解析参数。 + +``` +``` + +``` \ No newline at end of file diff --git "a/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241121-\350\277\224\345\233\236\345\200\274.md" "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241121-\350\277\224\345\233\236\345\200\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..ad191c3e6ed3d9e39fd59d13a82f372b2dfd79bd --- /dev/null +++ "b/\350\256\270\346\265\267\346\200\241/\350\257\276\345\240\202\347\254\224\350\256\260/20241121-\350\277\224\345\233\236\345\200\274.md" @@ -0,0 +1,25 @@ +``` +IActionResult 类型(接口) +IActionResult是一个接口,定义了生成HTTP响应所需的方法。ASP.NET Core MVC提供了多种实现IActionResult的类,如ViewResult(返回视图)、ContentResult(返回文本内容)、JsonResult(返回JSON数据)等。 + +控制器中的操作方法可以通过返回这些类型的实例来生成不同的HTTP响应。例如: + +csharp +public IActionResult Index() +{ + // 返回视图 + return View(); +} + +public IActionResult GetData() +{ + // 返回JSON数据 + return Json(new { Name = "John Doe", Age = 30 }); +} +``` +``` + ActionResult类型(接口加一般数据类型) +虽然IActionResult本身是一个接口,不直接包含数据,但ASP.NET Core MVC中的许多IActionResult实现都允许您指定要返回的数据。例如,ContentResult允许您指定文本内容,而JsonResult允许您指定要序列化为JSON的对象。 + +此外,您还可以创建自定义的IActionResult实现,以返回特定类型的数据。例如,您可以创建一个返回CSV文件的自定义结果类型。 +``` \ No newline at end of file