ASPNET程序设计-习题及答案汇总ch01--10.docx
项目一初识ASP.NET Core1 .简述 ASP. NET 与 ASP. NET Core 的区别。ASP. NET ASP. NET Core是两个不同的版本的Web应用程序框架,由微软开发 和维护。ASP. NET 是在.NET Framework 上构建的,而 ASP. NET Core 是在.NET Core上构建的。主要区别如下:-跨平台支持:ASP. NET Core可以在Windows、Linux和macOS上运行,而 ASP. NET 仅限于 Windowso轻量级和模块化:ASP. NET Core是一个轻量级的框架,只包含必要的组件, 可以根据需要选择和添加模块。而ASP. NET包含更多的功能和组件,导致更大的 应用程序体积。性能:ASP. NET Core在处理请求和响应方面具有更好的性能,主要得益于其 轻量级和模块化的设计。它还具有更低的内存消耗和更快的启动时间。Web API支持:ASP. NET Core在设计阶段就考虑到了 Web API的需求,提供 了更好的支持和集成。2 .简要概括.NET Framework和.NET Core的应用场景。.NET Framework是微软最初推出的开发框架,用于在Windows操作系统上构建 各种类型的应用程序。它是一个全面的框架,包含了大量的类库和功能,适用于 开发Windows桌面应用程序、Web应用程序以及企业级应用程序。.NET Core是微软开源的、跨平台的框架,用于在Windows、Linux和macOS上 构建高性能、可扩展、跨平台的应用程序。它是轻量级的,只包含最小的运行时、 类库和工具集。.NET Core适用于构建Web应用程序、云服务、微服务、跨平台 命令行工具等。简而言之,.NET Framework适用于需要全面功能和Windows专注的应用程序开 发,而.NET Core适用于需要跨平台、高性能和轻量级方案的应用程序开发。3 .简要叙述目标框架和目标框架名字对象的含义。目标框架是指在开发.NET应用程序时,要将其目标设置为特定的.NET I-ramework 或.NET Core版本。每个目标框架都有一个对应的名称对象,用于标识和区分不 同的目标框架。例如,对于.NET Framework 4.8 ,其目标框架名称对象为 ,z. NETFramework, Version=v4. 8,z<> 对于.NET Core 3. 1,其目标框架名称对象为 .NETCoreApp, Vcrsion=v3. 1”。目标框架和目标框架名称对象的含义是指明应用程序所针对的.NET平台版本, 以便在编译、构建和部署应用程序时,确保使用正确的类库和依赖项。通过设置 目标框架,开发人员可以明确指定应用程序在特定环境中的运行需求,并确保其ApiControllerpubl ic class StudentsController : ControllerBase (HttpGetCid')public lActionResult Get(int id)(根据学号查询学生详情,并返回JSON数据 var student = GetStudentByld(id);if (student = null)(return NotFoundO ;return Ok(student);private Student GetStudentByld(int id)(/根据学号查询学生详情的逻辑/示例代码var student = new StudentId = id,Name = "John Doe”,Grade = " A+";return student;public class Student (public int Id get; set; public string Name get; set; public string Grade get; set; 然后,在Startup, cs文件的ConfigureServices方法中,添加以下代码以启用MVC服务:esharppublic void ConfigurcServices(IScrviccCollection services)services. AddControllers();最后,在Startup, cs文件的Configure方法中,使用app. UseEndpoints配置MVC默认路由: csharppublic void Configure(1 App 1 icationBui 1 der app, IWebllostEnvironment env) (/ .app. UseEndpoints (endpoints => (endpoints. MapControllors 0;); )项目六EF Core数据访问与仓储模式1 .简述什么是EF Core,以及如何在ASP. NET Core中安装EF Core.Entity Framework Core(EF Core)是 Microsoft 开发的一个对象关系映射(ORM) 框架,用于在ASP. NET Core应用程序中管理数据库。它提供了一种简单而强大 的方式来访问和操作数据库,通过将数据库表映射到.NET对象并提供了一系列 的API进行数据的增删改查操作。在ASP. NET Core中安装EF Core的步骤如下:-打开Visual Studio,创建一个新的ASP. NET Core项目。-在NuGct包管理器控制台中运行以下命令来安装EF Core包: Install-Package Microsoft. EntityFrameworkCore根据你要连接的数据库类型,安装相应的EF Core数据库提供程序。例如,如 果你要连接到SQL Server数据库,运行以下命令:Tnstal1-Package Microsoft. Enti t)TrameworkCore. SqlServer如果你要使用数据库迁移功能,则还需要安装EF Core的相关包。运行以下命 令:Install-Package Microsoft. EntityFrameworkCore. Tools2 . EF Core是如何通过数据生成实体和DbContext类的?首先,在ASP. NET Core项目中创建一个类,表示数据库中的表。这个类被称 为实体类。在实体类中,使用属性来定义表的列,并为每个属性指定相应的数据类型和约 束。使用EF Coro的命令行工具或包管理器控制台运行数据库迁移命令,自动生 成数据库迁移代码。-EF Core会根据实体类和迁移代码生成数据库表和DbContext类。3.简述什么是仓储模式。试定义一个Student类,基于该类建立一个仓储,完成修改学生信息的操作。仓储模式(Repository Pattern)是一种设计模式,用于将数据访问逻辑与业务 逻辑相分离。它提供了一种独立于具体数据库技术的方式来处理数据访问。在仓 储模式中,通过创建一个仓储(Repository)类来处理与数据的交互,包括数据 的查询、插入、更新和删除等操作。仓储模式可以增强代码的可测试性、可维护 性和可扩展性。首先,定义一个Student类,用于表示学生的信息:public class Student(public int Id get; set; public string Name get; set; public int Age get; set; )然后,创建一个仓储接口 (Repository Interface),定义了一系列对学生数据 进行操作的方法:public interface IStudentRcpository(lEnumerable<Student> GetAllStudentsO;Student GetStudentByld(int id);void AddStudent(Student student);void UpdateStudent(Student student);void DeleteStudent(int id);)接下来,创建一个具体的学生仓储类(StudenlReposilory)实现仓储接口,并 实现对学生数据的具体操作:public class StudentRepository : TStudentRepository (private readonly DbContext dbContext;public StudentRepository(DbContext dbContext)(_dbContext = dbContext;)public lEnumerable<Student> GetAllStudents()(return _dbContext. Students. ToList();public Student GetStudentByld(int id)return dbContext. Students. FirstOrDefault(s => s. Td =二 id);public void AddStudcnt(Student student) (dbContext. Students. Add(student);_dbContext. SaveChanges();public void UpdateStudent(Student student) (_dbContext. Students. Update(student);dbContext. SaveChanges ();)public void DeleteStudent(int id)(var student = _dbContcxt. Students. FirstOrDefault(s => s. Id = id);if (student != null) ( dbContext. Students. Remove(student);_dbContext. SaveChanges(); ) )最后,在应用程序的启动类中,使用依赖注入将仓储类注册到容器中,以便在其 他地方使用该仓储:public void ConfigureServices(IServiceCollection services) (/注册仓储services. AddScopecKlStudentRepository, StudentRepository>();/ . )项目七使用Razor页面1 .什么是Razor页面?Razor页面是一种ASP. NET Core中使用的模版引擎,用于创建动态生成HTML页 面。Razor页面使用一种特殊的语法,允许在HTML中嵌入C#代码,从而实现页 面的逻辑和数据的绑定。2 .在 ASP. NET Core Web 应用程序中,Pages 文件夹中的_ViewImports, cshtml 文件有什么作用?在ASP. NET Core Web应用程序中,Pages文件夹中的_Viewlmports. cshtml文件 用于引入命名空间和设置页面的默认基类。在该文件中,可以使用如sing指令 引入需要在页面中使用的命名空间,并可以使用modcl指令设置默认的基类。3 .在 ASP.NET Core Web 应用程序中,Pages 文件夹中的_ViewStart. cshtml 文 件有什么作用?在ASP. NET Core Web应用程序中,Pages文件夹中的_ViewStart. cshtml文件用 于设置所有页面的默认布局。该文件中可以使用layout指令指定默认布局页面 的路径,从而在所有页面中使用同一个布局。4 .在一个Web项目中,定义两个不同的视图布局页面,分别用于显示登录视图 和内容详情视图,登录视图中不显示“友情链接”内容,内容详情视图中显示“友情链接”内容。-在Views文件夹中创建两个新的布局页面,例如LoginLayout. cshtml和 _ContentLayout. cshtmlo-在_LoginLayout. cshtml中不包含显示“友情链接”的内容。-在_ContentLayout. cshtml中包含显示“友情链接”的内容。-在初图中使用布局页面可以通过在对应的视图中添加以下指令来实现:Layout =" LoginLayout/; / 或者 Layout ="ConlenlLayout/' 一 一项目八TagHelper1 .简要说明在ASP. NET Core中,什么是TagHelper?在ASP. NET Core中,TagHelper是一种用于处理HTML标记的重要功能。它允许 开发人员通过在HTML标记上添加自定义属性来扩展和修改标记的行为和呈现。 TagHelper可以在服务器端执行逻辑处理.,并生成具有动态内容的最终HTML标 记,使开发人员可以以更为灵活和便捷的方式操作和呈现HTML。2 .如何在应用程序中使用TagHelper?如何使TagHelper在元素这一层上失效? 在应用程序中使用TagHelper,需要先创建一个TagHelper类,继承自TagHelper 类,并实现Process或ProcessAsync方法。在该方法中,可以通过output对象 来调整标记的属性、内容和样式等。然后,将TagHelper类添加到应用程序的依 赖注入容器(或手动实例化)。最后,在Razor视图中使用 VtagHelperPrefix:TagHelperName标记来应用该 TagHelper。要使TagHelper在元素层上失效,可以通过以下方法之一来实现:-将TagHelper类注释掉或删除。-在要应用 TagHelper 的元素上移除tagHclpcrPrcfix :TagHclpcrNamc标记。3 .仿照本项目的实战案例,使用内置的TagHelper制作一个Razor页面,用于提交学生的基本信息,如姓名、性别、专业和邮箱。首先,创建一个Razor视图(例如,Student. cshtml ):html<h3>添加学生信息</h3><form method二post")<div class=/zform-group/z><label for="name")姓名:/label)<input type="text" id="name name="name" class=form-control /></div><div class=z,fonn-groupz,><label for="gender>性别:</label><select id二gender“ name二gender class="form-control”<option value二男">男/option)<option value=女>k/option></select></div><div class="zform-group,z><label for="major"专业:</label<input type二 text" id ="major“ name 二 major' c las s=z,form- con tror/ /></div><div class="form-group”<label for=cmail>邮箱:/label<input type ="email" id = email“ name ="email“ class=z,form- control” /></div><button type="submit" class二btn btn-primary>提交/button)</form>然后,可以在项目的Views文件夹中创建一个名为Helpers的文件夹,并在该 文件夹中创建一个名为“StudentFormTagHelper. cs”的 TagHelper 类。csharpusing Microsoft. AspNetCore. Razor. TagHelpers;namespace YourNamespace. Helperspublic class StudentEormTagHelper : Tagllelperpublic override void Process (TagllelperContext context, TagHelperOutput output)output.TagName = "form"output. Attributes. SctAttribute (,/method,z, post);output. Attributes. SetAttribute("class", "my-form");output. Content. AppendHtml (<h3>添加学生信息</h3>);output. Content. AppendHtml (<div class=form-group>);output. Content. AppendHtml (,z<label for=,name,> 姓 名:/label)”);output. Content. AppendHtml ("inputtype="text"id='nanie namc=name class=/zform-control/ />);output. Content. AppendHtml (</div>");output. Content. Appendlltml (<div class='form-group>); output. Content. AppendHtml(</selcct>); output. Content. AppendHtml(</div>");output. Content. AppendHtml (z,<label 别:/label)”);output. Content. /XppendHtml (<select name二、gender class=,/form-control/>/,);output. Content. AppendHtml("option /option>”);output. Content. AppendHtml("option/option”);for=,gender,> 性id=,gender,/value =、"男 "> 男value=女女output. Content. AppendHtml(<div class="form-group">);output. Content. AppendHtml (,z<label for=major> 专 业:/label)“);output. Content. AppendHtml("inputtype="text"id=、major" name='major class=form-control />);output. Content. Appendlltml (</div>");output. Content. AppendHtml (<div class="form-group">);output. Content. AppendHtml (/z<labelfor=、emai 1>邮箱:/label”);output. Content. AppendHtml("inputtype='email、"id=、cmail name="cmail class=/form-control/>);output. Content. AppendHtml(</div>);output. Content. Appendlltml ("buttontype=、"submitclass=/,btn btn-primary>提交/button)“);最后,在 Razor 视图中,在 form 标签上添加helpers:StudentFormTagHelper 标记以使用TagHelper:htmlpageaddTagHelper *, Microsoft. AspNetCore. Mvc. TagHelpersaddTagHelper *, YourNamespace<!.><form helpers:student-form-tag-helper></form>项目九身份验证与授权1 .在一个Web项目中添加ASP.NET Core Identity框架。/添加Identity服务services. AddIdentity<IdentityUser, IdentityRole>().AddEnt i tyFrameworkStores<Appli cat i onDbContext>().AddDefaultTokenProviders();2 .修改ASP. NET Core Identity框架的默认配置选项,要求密码长度为8个字 符,包含特殊字符;登录错误次数不能超过3次,否则锁定账户。/配置Identity选项services. Configure< 1 dentit5r0ptions>(options =>(/密码设置options. Password. RequireDigit = false;options. Password. RcquiredLength = 8;options. Password. RequireNonAlphanumeric = true;options. Password. RequireUppercase = true;options. Password. RequireLowercase = true;/登录错误锁定账户options. Lockout. MaxFailedAccessAttempts = 3;);3 .创建一个具有以下策略要求的自定义策略。必须拥有admin角色。仅对职工号(EmployeeNumber)为“sw001"、"sw003“和”sw005”的声明有效。csharpservices. AddAuthorization(options => (options. AddPolicy("AdminPolicy”, policy =>policy. RequireRole(,admin,/).RequireClaim(z/EmployeeNumber/z, sv001,“sw003,sw005); );项目十发布与部署1 .简述如何将应用程序发布到本地文件夹。在Visual Studio中打开你的应用程序解决方案。-在解决方案资源管理器中,右键单击你的项目,选择发布。在发布目标页面上,选择文件夹作为发布目标,并设置目标文件夹 的路径。根据需要配置其他发布选项,例如配置文件、数据库连接等。-点击发布按钮开始发布应用程序。-发布完成后,你可以在指定的目标文件夹中找到应用程序的所有文件。2 .如何验证应用程序是否发布成功?验证应用程序是否发布成功的方法是运行已发布的应用程序并进行功能测试。你 可以按照以下步骤进行验证:- 打开发布后的应用程序文件夹。- 双击应用程序的可执行文件(通常是一个.exe文件)。确保应用程序能够成功启动,并且功能正常。- 可以通过在浏览器中访问应用程序的URL来进行进一步的测试。3 .在计算机上安装.NET Core托管模块。- 打开官方的.NET Core下载页面(. microsofl. com/down1oad/dotnet-core)。- 下载适用于你的操作系统的.NET Core运行时或SDK安装程序。运行安装程序,并按照安装向导的指示进行操作。- 完成安装后,你的计算机就已安装了.NET Core托管模块。4 .在I IS服务器上添加一个网站,运行发布的ASP. NET Core应用程序。在11S服务器上添加一个网站并运行发布.的ASP. NET Core应用程序的步骤如下:- 在HS管理器中,右键单击网站文件夹,选择添加网站。输入网站的名称和物理路径,物理路径应指向应用程序发布的文件夹。- 配置网站的主机名和端口号。- 在应用池中选择运行应用程序的.NET Core版本。点击确定按钮创建网站。打开浏览器,在地址栏中输入网站的URL来访问运行的ASP. NET Core应用程 序。在目标平台上正确地运行和部署。项目二Web应用的基础知识1.利用表格标签制作一张表格,展示某车间4个工人的信息,如图2-24所示。 html<table><tr>< th> 姓名 </th>< th> 工号 </th>< th> 年龄 </th>< th> 工资 </th></tr><tr>< td> 华龄 </td><td>张三 98056</td><td>26</td><td>3600</td></tr><tr><td> 季四 </td><td>98231</td><td>23</td><td>2900</td></tr><tr><ld> 王五 </ld><td>97864</td><td>34</td><td>3300</td></tr><tr><td> 朱八 </td><td>99001</td><td>19</td><td>1800</td></tr></table>2 .在HTML文件中插入一个<出丫>标签,并在其中插入一张图片和一段文字。通 过CSS样式设置div布局块宽为350像素,高为150像素,文本颜色为橙色,边框为1像素的深灰色实线,并且在页面上居中,效果如图2-25所示。 html<div class=container”)<img src二image. jpg alt二图片<p>这是一段文字</p></div>CSS样式:css.container (width: 350px;height: 150px;color: orange;border: lpx solid gray;text-align: center;)3 .安装和配置I IS服务器,并在I IS服务器上运行上一道习题中的网页。安装HS服务器:打开控制面板,选择“程序”,然后选择“打开或关闭 Windows 功能”。在所列出的功能中找到"Internet Information Servicesw , 勾选该选项,并点击“确定”进行安装。-配置IIS服务器:打开IIS管理器,在“站点”下右键单击“默认网站”,选 择“添加应用程序”。在“Alias”字段中输入应用程序名称,选择应用程序池, 默认选择“默认应用程序池”,然后设置物理路径到网页所在的文件夹。点击 “确定”完成配置。-运行网页:在浏览器中输入服务器地址,加上网页的路径即可访问网页。请注意,在配置HS服务器之前,确保已经在服务器上部署了包含所需文件的网 站目录。项目三C#的基础知识1 .编写CH代码,输出九九乘法表。#include <iostrcam> int main() for (int i = 1; i <= 9; i+) for (int j = 1; j <= i; j+) std: :cout « j << z,x « i << ,z = z/ << i * j << t; std:cout << std:endl;)return 0;2 .编写一个程序,输入三角形的三条边长a、b、c,利用海伦定理S=Vp(p-a) (p-b) (p-c)计算三角形的面积。其中,p=a+b+c/2 ttinclude <iostream>#include <cmath> double calculateTriangleArea(double a, double b, double c) double p = (a + b + c) / 2. 0;double area = std:sqrt(p * (p - a) * (p - b) * (p - c);return area;)int main()(double a, b, c;std:cout << 请输入三角形的三条边长:; std:cin » a >> b >> c;double area = calculateTriangleArea(a, b, c);std: :cout << ”三角形的面积为:“<< area « std: :endl;return 0;3 .创建一个Circle (圆)类,其成员属性有圆心坐标x、y,以及半径r。在 Main。方法中初始化Circle类对象,并计算圆的周长和面积。#include <iostream>#include <cmath>class Circle private:double x, y;double r;public:Circle(double centerX, double centerY, double radius) x = centcrX;y = centerY;r = radius;double getPerimeter() return 2 * M PT * r;double get Area () return M_PI * r * r;int main() double x, y, r;std: :cout << ”请输入圆的圆心坐标和半径:;std:cin » x >> y >> r;Circle circle(x, y, r);double perimeter = circle. getPerimeter();double area = circle. getAreaO ;std: :cout << 圆的周长为:"<< perimeter << std: :endl;std: :cout << 圆的面积为: << area « std: :endl;return 0;)4 .创建一个Shape (形状)类,从Shape类派生出一个Rectangle (矩形)类,在 Main。方法中初始化Rectang Ie类对象,并计算矩形的面积。#include <iostream>class Shape protected:double width;double height;public:Shape(double w, double h) width = w;height = h;virtual double getAreaO (return width * height;);class Rectangle : public Shape public:Rectangle (double w, double h) : Shape (w, h) double getArea() override return width * height;);int main() double width, height;std:cout << 请输入矩形的宽度和高度:; std:cin » width » height;Rectangle rectangle (width, height);double area = rectangle. getAreaO ;std: :cout << 矩形的面积为: « area « std: :endl;return 0;)项目四ASP. NET Core的核心组件1 .在Visual Studio中创建一个ASP. NET Core Web项目,并查看项目的文件 结构、入口文件、启动文件和配置提供程序。在Visual Studio中创建ASP.NET Core呢b项目并查看项目的文件结构、入口 文件、启动文件和配置提供程序:首先,打开Visual Studio并选择创建一个新项目。在创建新项目对话框中, 选择ASP. NET Core Web应用程序,并点击下一步。然后,输入项目名称和位置,并选择ASP.NET Core 3. 1或更高版本作为目标框 架。点击下一步。在创建新应用程序对话框中,选择Web应用程序(模型-视图-控制器)模板, 并点击下一步“。接下来,选择项目的身份验证类型(可选择无身份验证、个体用户帐户、工作或 学校帐户等),设置HTTPS配置,并点击下一步。最后,在创建对话框中,选择项目的位置和解决方案名称,并点击创建。 创建完成后,你可以看到项目的文件结构。其中,入口文件是Program.es,在其 中使用 Host. CreateDefaultBuiIder 方法创建一个 WebHost,并调用 Startup 类 来配置应用程序。启动文件是Startup.cs,其中包含应用程序的配置和中间件的注册。配置提供程序可在appsettings. json文件中设置,也可以在Startup, cs文件中 使用Configuration属性来访问。2 .在Startup, cs文件中使用3种方法注册中间件,使用Invoke ()方法执行 下一个中间件,使用Wr iteAsync ()方法输出一条信息,使用Map ()方法传 递参数。csharppublic void Configurc(IApp1icationBui1dor app, IWebHostEnvironmcnt env) (/方法1:使用Use方法注册中间件,并使用Invoke方法执行下一个中间 件app. Use (async (context, next)=> (await context. Response. WriteAsync(''Middleware 1 - Beforern,/);