菜鸟学ASP
菜鸟学ASP
学习目的:安装调试ASP的环境,并且调试第一个简单的程序。
因为我们学ASP的目的就是想建立一个网站,那么一般习惯是建立的网站内所有文件应该同时放到一个文件夹中(当然这个文件夹中还可以按需要设置子文件夹!),所以在这里我在E盘建立一个myweb的文件夹。
首先来安装Windows 2000/XP自带的IIS作为服务器。在这里因为我的机器是XP所以所有截图都是XP下完成的。
控制面板–>>添加或删除程序。
然后是添加删除windows组件-选中IIS组件前面的勾,之后等待安装,这里可以观看本站以前给大家做的视频教程,完成安装后。
之后在控制面板中双击“管理工具”。
然后双击“internet信息服务”,这就是IIS。
选择“默认网站”,然后右键属性或者直接按快捷键
在属性页面内只有三个页面需要修改,先是网站,如果用户有固定IP,可以分配一个IP
接下来在注主目录中选择一个自己硬盘上面的文件夹存放网站(这个目录就是我们上面说的在e盘建立的目录),选中读取、写入
在文档中添加默认的页面,比如打http://www.liexiaow.com猎校网 调用了一个默认文档即是你添加的页面。
接下来也是最关键的:
1、在刚才你定义的一个文件夹里面新建一个文件,可以用记事本建立一个文本文件然后把下面的内容复制到记事本中:
保存为1.asp文件(注意:.asp不能省略啊,如果省略了你就保存了一个文本文件了)。
最后打开IE,在地址栏内输入:http://127.0.0.1/1.asp(或者http://localhost/1.asp)回车后就可以看到效果了。
最后解释一下代码的含义。
response.write就是显示的意思,前后的 <% 和 %> 是asp的标记符号,在这里面的信息都由服务器处理。127.0.0.1是地址,1.asp是文件名。第一天就结束了!
表单元素要放在一个表单域里面,建立一个表单域。然后修改动作里面的文件为要接受这个表单变量的ASP文件。方法有两种,一种是POST,这个方法传送的变量不会在浏览器的地址栏里面显示,可以大批量传送数据;GET则是会在浏览器地址栏里面显示的,等一会举例子。
下面我们看一个表单元素。
文本域,这个是最基本的,传送的是文本信息,一般用户名,密码都要用这个传送,不过要是密码的话要在类型里面选择密码,这样就会以*代替显示出来的字符,文本域的名字很重要,以后会用到这个名字所以一般不用默认的名字。
现在举一个例子:如果文本域的名字是name的话,用来传送网上用户登记的名字,在表单域里面,传送到reg.asp,用POST方法,那么在reg.asp里面这样得到变量<%name=request.form(\”name\”)%>如果要显示变量再家加一句,response.write name,这样就形成了一个从客户端到浏览器再回到客户端的过程。如果方法用的是GET的话,那么就改为name=request.querystring(\”name\”)实际上两者可以统一为name=request(\”name\”)。下面看看按钮,按钮里面无非两种,一种是提交表单的按钮,一种是重新输入的按钮。单选按钮,一个按钮有一个值。在列表里面同样,添加列表选项和值。下面举一个例子,实际上各种表单元素都是差不多的。
下面是具体的代码: (注:把下面代码保存为一个.htm的文件就可以了.我保存的1.htm)
打开浏览器在地址栏内输入:http://localhost/1.htm如下图:(呵呵,因为是练习,我没有美化页面啊!)
下面我们要开始学数据库了!只要把表单和数据库相应的字段连接上就可以了。
学会ACCEES数据库的使用。
首先,要安装OFFICE里面的ACCEES(我的演示是OFFICE 2003版本),安装过程这里就不说了,安装好以后会,打开Access.按空数据库,新建一个数据库,文件名字可以叫guestbook.mdb。(提示:为了安全期间,文件名复杂一点好,因为ACCESS数据库可以被下载的!!)
使用设计器创建新的表,一个数据库MDB文件里面可以建立多个表。双击“使用设计器创建表”
填写字段名字然后选择字段类型,一条记录可以有很多字段,可以有很多字段类型,字段大小的意思就是这个字段最多可以容纳的字符数,当这个字段没有任何信息是,ACCEES会用默认值代替(没有任何信息不是空的意思),一般必填字段和允许空字符串分别设置为否、是,以防止出错
按照上图分别建立几个字段,在时间中默认值为=now()就是这个字段不需要填写,系统直接以当前时间代替。
所以的字段都建立以后,关闭这个窗口,按提示保存表,输入表的名字guest,最后出现下图的提示,选择是,主键是记录的标识,为了以后简单,大家可以把编号改为ID,还有在ACCEES里面尽量不要用中文表示字段名字
最后,双击打开这个表,观看表里面的记录
握ACCESS数据库的连接和读取记录
首先还打开我们上一节课建立的数据库中的表,随便输入几条记录,如下图:
这节课学习的内容有一点枯燥,但是很重要。在这里不需要知道命令具体的运行情况,外面的很多书籍之所以不适合入门就是因为介绍了太多的理论知识,让初学者一头雾水。
下面开门见山,看两行代码:
在一个表格中,我们用4列分别显示了上次建立的表里面的四个字段,用do循环,not rs.eof的意思是条件为没有读到记录集的最后,rs.movenext的意思是显示完一条转到下面一条记录,<%=%>就等于<%response.write%>用于在html代码里面插入asp代码,主要用于显示变量。
把上面三段代码依次复制粘贴到剪贴板中,一定要按顺序复制粘贴啊!,然后保存为duqu.asp就可以了!打开浏览器,在地址栏内输入:http://localhost/duqu.asp.
下面是我机器上面的结果图片。
学会数据库的基本操作–写入记录
数据库的基本操作无非是:查询记录,写入记录,删除记录,修改记录。
今天我们先学习写入记录。先建立一个表单:(把下面文章保存为5.htm)
<form name=\”form1\” method=\”post\” action=\”exa5.asp\”>name <input type=\”text\” name=\”name\”><br>tel <input type=\”text\” name=\”tel\”><br>message <input type=\”text\” name=\”message\” value=\”\”><br><input type=\”submit\” name=\”Submit\” value=\”提交\”><input type=\”reset\” name=\”Submit2\” value=\”重置\”></form>
表单提交到exa5.asp,下面是exa5.asp的代码: (把下面代码保存为5.asp)
<%set conn=server.createobject(\”adodb.connection\”)conn.open \”driver={microsoft access driver (*.mdb)};dbq=\”&server.mappath(\”data/guestbook.mdb\”)name=request.form(\”name\”)tel=request.form(\”tel\”)message=request.form(\”message\”) exec=\”insert into guest(name,tel,message)values(\’\”+name+\”\’,\”+tel+\”,\’\”+message+\”\’)\”conn.execute execconn.closeset conn=nothingresponse.write \”记录添加成功!\”%>
在这里前面两句我不说了,后面三句我也不说了,前面说过exec里面的是执行的命令,添加记录的比较繁,大家要仔细看。
insert into后面加的是表的名字,后面的括号里面是需要添加的字段,不用添加的或者字段的内容就是默认值的可以省略。注意,这里的变量一定要和ACCESS里面的字段名对应,否则就会出错。values后面加的是传送过来的变量。exec是一个字符串,\”insert into guest(name,tel,message)values(\’\”是第一段,在ASP里面不能嵌双引号,所以可以用\’代替双引号,放在双引号里面,连接两个变量用+或者&所以\”\’,\”又是一段,中间夹了一个name就是表单传来的变量,这样就可以在这个变量外面加两个\’\’,表示是字符串了,后面的tel是数字型变量所以不需要外面包围\’\’,大家慢慢分析这句话,如果用表单传来的数据代替变量名字的话这句话为(假设name=\”aaa\”,tel=111,message=\”bbb\”):\”insert into guest(name,tel,message)values(\’aaa\’,111,\’bbb\’)\”。
接下来的conn.execute 就是执行这个exec命令,最后别忘记把打开的数据库关闭,把定义的组件设置为空,这样可以返回资源。
下面几条语句用于关闭数据库的代码:
rs.closeset rs=nothingconn.closeset conn=nothing
记住,次序不可以颠倒! 可以到数据库里面去看一看,或者用duqu.asp读取看看是不是多了记录阿?下面是我利用上一节的文件读取数据库的图:
学会数据库的基本操作--查询记录
在第四天中我们用到下面这样一个程序:
首先在浏览器中输入http://localhost/6.htm如下图所示:
学会数据库的基本操作–删除记录
开门见山,大家直接看程序。
exec=\”delete * from guest where id=\”&request.form(\”id\”)
上面这句话完成了删除记录的操作,不过锁定记录用了记录唯一的表示id,我们前面建立数据库的时候用的是系统给我们的主键,名字是编号,由于是中文的名字不是很方便,大家可以修改为id,我已经修改了啊!
不修改的话就是用下面的代码了:
exec=\”delete * from guestbook where 编号=\”&request.form(\”id\”)
下面我们看完整的代码:一个表单传给ASP文件一个ID,然后这个ASP文件就删除了这个ID。
7.htm:
<form name=\”form1\” method=\”post\” action=\”exam7.asp\”>请输入删除的ID号: <input type=\”text\” name=\”id\”><input type=\”submit\” name=\”Submit\” value=\”提交\”></form>
学会数据库的基本操作--修改记录
先来看代码:(存为exam8.asp就可以了)
在这里,rs.open exec,conn,1,3后面的参数是1,3,这我以前提过,修改记录就要用1,3。实际上修改记录很容易看懂,记录集是rs,rs(\”aa\”)就是当前记录aa字段的东西,让它等于新的数据request.form(\”aa\”)当然就修改了,不过最后别忘记保存,那就是rs.update!
说到这里,记录的搜索,读取,修改,插入都说了,通过这最基本的东西就可以作出复杂的东西了,外面的大型数据库:新闻系统,留言簿就是字段多一点罢了。今天的示例中的代码是结合以前的数据库的,以后回去调试分析一下。
大家测试的流程:首先运行8.htm文件
基本的SESSION组件,总结response,request组件。
首先,有会员系统的任何程序都会用到检测是不是用户已经登陆这个步骤。这就用到了SESSION组件,下面我们 看一个代码来说明。
<%session(\”login\”)=\”yes\”%>
这句话的意思就是在session里面定义一个login字符串变量,值为\”yes\”,直接可以赋值,不需要声明。是不是很简单?
如果我们做管理员登陆系统的话,首先是一段检测是不是管理员:
if 是 then session(\”isadmin\”)=yes\”else session(\”isadmin\”)=\”no\”end if
在每一个需要管理员才能看的页面最前面加上:
<%if not session(\”isaadmin\”)=\”yes\” thenresponse.redirect \”login.htm\”%>
这样一般用户就无法打开这个页面。解释一下response.redirect,它是转向的意思,后面的\”login.htm\”就是转向的文件。这样没有登陆的管理员是无法看到后面的内容的。
response组件基本就是用到response.write(),response.redirect() 分别是写字符串和转向的作用。
request基本就是request.form(),request.querystring() 分别是接受post,get方法传来的信息。
最后我们一起来制作一个简单的后台登陆管理界面,首先在myweb目录下建立一个admin文件夹,然后我们建立一个数据库名字为admin.mdb,然后我们再建立一个表,表中设置两个字段name,password,类型都是文本型的!最后退出时设置主键,保存为表名check。然后可以输入一条记录用户名:admin,密码:admin。具体建立数据库的方法请看《菜鸟十天学会ASP教程之第三天:数据库的建立》
下面我们开始编写ASP程序,首先建立一个index.asp(管理主界面)程序,代码如下:
运行时首先运行index.asp程序,运行效果部分截图如下:
分页技术
今天最后一天我们学习一下ASP里面稍微难一点地分页技术,毕竟当我们有N条记录的时候我们不可能把所有记录显示在一个页面里面吧。
rs.pagesize设置一个页面里面显示的记录数,pagecount是我们自己定义的一个变量,rs.pagecount是记录的个数,page也是我们自己定义的一个变量,我们下一页的链接可以设置为list.asp?page=<%=page+1%>,下一页的链接可以设置为list.asp?page=<%=page-1%>,这样当按下链接的时候调用页面自己,page这个变量就+1或者-1了,最后我们让rs.absolutepage(当前页面)为第page页就可以了。
if request.QueryString(\”page\”)=\”\” then page=1,这句话的作用就是我们打开list.asp的时候没有跟随page变量,自动设置为page=1,防止出错,还有当我们if….then…放在一行的时候end if可以省略。是不是分页也不难?
下面说一种特殊情况:
if page=1 and not page=pagecount,这个时候没有上一页,但是有下一页
elseif page=pagecount and not page=1,这个时候没有下一页,但是有上一页
elseif page<1,这个时候没有任何记录
elseif page>pagecount then,这个时候没有任何记录
elseif page=1 and page=pagecount,这个时候没有上一页,没有下一页
else,这个时候有上一页,也有下一页。
下面看一段显示1到n页,且每一个数字点击以后就出现这个数在代表的页面的代码,很常见哦。
<%for i=1 to pagecount%><a href=\”list.asp?page=<%=i%>\”><%=i%></a><%next%>
for….next是循环从i=1开始,循环一次加1到pagecount为止。
最后我的实例里面包含了一个最简单的ASP程序,但是功能样样有,是ASP的精髓,每一个ASP大型程序都包含了它。
add.htm增加记录页面
add.asp增加记录操作
conn.asp数据库链接
del.asp删除记录操作
modify.asp修改记录页面
modifysave.asp修改记录操作
list.asp这个是这个程序的核心,通过这个页面实现记录的添加、修改、删除。
宝塔面板怎么安装asp网站呢?
宝塔面板怎么安装asp网站呢?建站程序是ASP或者是ASPX的用户,只能在Windows系统中才能运行。所以,要选择宝塔面板Windows版本安装ASP网站。
一般Windows系统的面板安装很简单,直接照着提示操作就可以了。
1、安装IIS等
因为是要用到ASP程序,所以我们只能安装IIS,不能是Apache或者Nginx。除了需要安装IIS,同时还可以安装PHP和MYSQL、SQLSERVER 数据库,因为Windows也是兼容PHP程序的。
2、添加站点
宝塔Windows面板部署ASP网站,添加站点可以在面板也可以在软件界面,程序类型这个需要我们自己选择是ASP、ASPX或者PHP。
3、测试安装ASP程序
随便找一个ASP程序安装看看是否可以安装。网址解析打开准备安装,如果有提示内部服务器错误。可以根据官方论坛给予的办法解决,或者直接先卸载IIS,重新安装也可以。
根据提示向导直接安装就可以了,ACCESS数据库直接是可见文件,所以系统是自带的,不需要类似MYSQL数据库设置创建。
用Windows版本安装asp网站,而PHP网站安装可以使用宝塔Linux面板。同样便捷,易操作。
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
本章介绍如何使用 ASP.NET Core 在服务器端构建具有现代 HTTP 架构的网站。
ASP.NET Core 是一个由微软开发的免费、开源和跨平台的 web 框架,用于构建现代、基于云和互联网连接的应用程序。它是对之前的 ASP.NET 框架的重大重新设计,专注于灵活性、模块化和性能。
ASP.NET Core 提供了一个统一的编程模型,用于构建 Web 用户界面 (UI) 和 Web API,这意味着您可以使用相同的框架来处理服务器端和客户端逻辑。
ASP.NET Core 针对高性能进行了优化,能够处理大量的每秒请求。它具有轻量级的模块化架构,允许开发人员仅包含必要的组件,从而减少整体占用。
您将学习如何使用 ASP.NET Core 8 中引入的 Blazor 静态服务器端渲染 (SSR) 功能构建简单的网站。
本章涵盖以下主题:
- 探索 ASP.NET Core
- Blazor 的历史
- 探索 Blazor 静态 SSR
- 使用 Entity Framework Core 和 ASP.NET Core
在我们探索一个示例 ASP.NET Core 项目之前,让我们回顾一下它的架构。
ASP.NET Core 的架构由几个关键组件组成:
- 中间件:中间件组件用于处理请求和响应。它们在管道中串联在一起,每个中间件处理请求并将其传递给链中的下一个组件。在本章的可选在线部分中,您可以学习如何自定义此管道。
- 路由:路由组件负责将传入请求映射到适当的端点和 Blazor 组件。
- 依赖注入(DI)容器:这是内置的,用于管理服务对象的生命周期和依赖关系。
- 配置:ASP.NET Core 使用灵活的配置系统,支持多种来源,如 JSON 文件、环境变量和命令行参数。
- 日志记录:该框架具有一个日志记录 API,支持多种日志提供程序,允许您以一致的方式捕获和存储日志数据。
现在我们将创建一个空的 ASP.NET Core 项目,并探索如何使其能够提供简单的网页。
我们将创建一个 ASP.NET Core 项目,该项目将显示来自 Northwind 数据库的供应商列表。
dotnet 工具有许多项目模板,可以为您完成很多工作,但很难知道哪种模板最适合特定情况,因此我们将从空网站项目模板开始,然后逐步添加功能,以便您可以理解所有部分:
- 使用您首选的代码编辑器打开 ModernWeb 解决方案,然后添加一个新项目,如下列表所定义:
- 项目模板:ASP.NET Core 空项目 [C#] / web 。对于 Rider,选择名为 ASP.NET Core Web 应用程序的项目模板,然后将类型设置为空。
- 项目文件和文件夹: Northwind.Web 。
- 解决方案文件和文件夹: ModernWeb 。
- 对于 Visual Studio,保持所有其他选项为默认设置。
- 例如:
- 框架:.NET 9.0(标准术语支持)
- 配置为 HTTPS:已选择
- 启用 Docker:已清除
- 请勿使用顶级语句:已清除
- 对于 VS Code 和 dotnet new web 命令,默认选项是我们想要的。在未来的项目中,如果您想从顶级语句更改为旧的 Program 类样式,请指定开关 –use-program-main 。
在创建新项目时,Visual Studio 和 dotnet new 选项的摘要可以在以下链接的 GitHub 仓库中找到:https://github.com/markjprice/cs13net9/blob/main/docs/ch01-project-options.md。
- 构建 Northwind.Web 项目。
- 在 Northwind.Web.csproj 中,请注意该项目类似于类库,只是 SDK 是 Microsoft.NET.Sdk.Web ,如下标记中所示:
添加一个元素以全局和静态方式导入 System.Console 类,如下所示的标记:
- 如果您使用的是 Visual Studio,请在解决方案资源管理器中切换显示所有文件。如果您使用的是 Rider,请将光标移动到解决方案窗格上,然后点击“眼球”图标。
- 展开 obj 文件夹,展开 Debug 文件夹,展开 net9.0 文件夹,并选择 Northwind.Web.GlobalUsings.g.cs 文件。请注意,隐式导入的命名空间包括控制台应用程序或类库的所有命名空间,以及一些 ASP.NET Core 的命名空间,例如 Microsoft.AspNetCore.Builder ,如下代码所示:
- 关闭文件并折叠 obj 文件夹。
- 在 Northwind.Web 项目/文件夹中,展开名为 Properties 的文件夹,打开名为 launchSettings.json 的文件,并注意名为 http 和 https 的配置文件。它们有随机分配的端口号,您将在下一步中更改,因此现在只需记下它们的位置,如以下配置中所示的高亮部分:
launchSettings.json 文件仅在开发期间使用。它对构建过程没有影响。它不会与编译后的网站项目一起部署,因此对生产运行时没有影响。它仅被像 Visual Studio 和 Rider 这样的代码编辑器处理,以设置环境变量并定义项目在代码编辑器启动时供 Web 服务器监听的 URL。
- 对于 https 配置文件,对于其 applicationUrl ,将 http 的分配端口号更改为 5130 ,将 https 更改为 5131 ,并交换顺序,使 http 在列表中排在第一位,并将作为默认使用,如以下标记中所示:
http 和 https 启动配置文件具有 commandName 为 Project ,这意味着它们使用项目中配置的网络服务器来托管网站,默认情况下是 Kestrel。还有一个用于 IIS 的配置文件和设置,IIS 是仅限 Windows 的网络服务器。在本书中,我们将仅使用 Kestrel 作为网络服务器,因为它是跨平台的。为了简化您的 launchSettings.json 文件,您甚至可以删除 iisSettings 和 IIS Express 部分。
- 将更改保存到 launchSettings.json 并关闭文件。
- 在 Program.cs 中,请注意以下事项:一个 ASP.NET Core 项目就像一个顶级控制台应用程序,具有一个隐藏的 <Main>$ 方法作为其入口点,该方法使用名称 args 传递一个参数。它调用 WebApplication.CreateBuilder ,该函数使用默认的网络主机创建网站的主机,然后进行构建。该网站将对所有 HTTP GET 请求以该网站的根路径响应以下纯文本: Hello World! 。对 Run 方法的调用是一个阻塞调用,因此隐藏的 <Main>$ 方法在 web 服务器停止运行之前不会返回。
Program.cs 的内容在以下代码中显示:
在现有对 MapGet 的调用后,添加两个调用以定义一个返回匿名 C# 对象作为 JSON 的端点,以及一个返回网页的端点,如以下代码所示:
除了 Json 和 Content , Results 类还有许多其他方法,如 BadRequest 、 Bytes 、 Created 、 File 、 NoContent 、 NotFound 、 Ok 、 Problem 、 Redirect 等。您可以在以下链接了解更多信息:https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.results。
- 在 Program.cs 的底部,添加一个注释以解释 Run 方法,并在 Run 之后写一条消息到控制台,因此,在网络服务器停止后,如以下代码中突出显示的内容所示:
我们现在将测试 ASP.NET Core 空网站项目的功能。我们还将通过将 HTTP 切换到 HTTPS 来启用浏览器与 Web 服务器之间所有流量的加密,以保护隐私。HTTPS 是 HTTP 的安全加密版本。
- 对于 Visual Studio:在工具栏中,确保选择了 https 配置文件(而不是 http、IIS Express 或 WSL),然后将 Web 浏览器更改为 Google Chrome,如图 13.1 所示:
图 13.1:在 Visual Studio 中选择带有 Kestrel Web 服务器的 https 配置文件
- 导航到 调试 | 无调试启动….
- 在 Windows 中,如果您看到 Windows 安全警报,提示 Windows Defender 防火墙已阻止此应用程序的一些功能,请点击允许访问按钮。
- 第一次启动安全网站时,您可能会收到通知,您的项目已配置为使用 SSL,为了避免浏览器中的警告,您可以选择信任 ASP.NET Core 生成的自签名证书。点击“是”。当您看到安全警告对话框时,再次点击“是”。
- 对于 VS Code,输入命令以 https 配置文件启动项目,如下所示: dotnet run –launch-profile https 。然后启动 Chrome。
- 对于骑手:导航到 运行 | 编辑配置….在运行/调试配置对话框中,选择 Northwind.Web: https。在对话框底部,位于“启动后”复选框的右侧,选择 Chrome,然后点击确定。导航到 运行 | 运行 ‘Northwind.Web: https’
- 在 Visual Studio 的命令提示符窗口或 VS Code 的终端中,请注意以下内容,如下输出所示:网络服务器已开始监听我们为 HTTP 和 HTTPS 分配的端口。您可以按 Ctrl + C 关闭 Kestrel Web 服务器。托管环境是 Development 。
Visual Studio 还会自动启动您选择的浏览器并导航到第一个 URL。如果您使用的是 VS Code,您需要手动启动 Chrome。
- 在命令提示符或终端中保持 Kestrel web 服务器运行。
- 在 Chrome 中,显示开发者工具,然后点击网络标签。
- 请求网站项目的主页:如果您使用的是 Visual Studio,并且 Chrome 自动启动并已为您输入了 URL,请单击“重新加载此页面”按钮或按 F5。如果您正在使用 VS Code 和命令提示符或终端,则在 Chrome 地址栏中手动输入地址 http://localhost:5130/ 。
- 在网络选项卡中,点击 localhost,并注意响应是来自跨平台 Kestrel web 服务器的纯文本 Hello World!,如图 13.2 所示:
图 13.2:网站项目的纯文本响
像 Chrome 这样的浏览器可能还会请求一个 favicon.ico 文件以在其浏览器窗口或标签中显示,但该文件在我们的项目中不存在,因此显示为 404 Not Found 错误。如果这让你感到烦恼,你可以在以下链接免费生成一个 favicon.ico 文件并将其放入项目文件夹中:https://favicon.io/。在网页中,你还可以在元标签中指定一个,例如,使用 Base64 编码的空白文件,如以下标记所示:
<link rel=\”icon\” href=\”data:;base64,iVBORw0KGgo=\”>
- 输入地址 https://localhost:5131/ ,请注意,如果您没有使用 Visual Studio 或在被提示信任 SSL 证书时点击了“否”,那么响应将是隐私错误。当您没有配置浏览器可以信任的证书以加密和解密 HTTPS 流量时,您将看到此错误(如果您没有看到此错误,那是因为您已经配置了证书)。在生产环境中,您可能希望向像 Verisign 这样的公司支付 SSL 证书费用,因为他们提供责任保护和技术支持。在开发过程中,您可以告诉您的操作系统信任 ASP.NET Core 提供的临时开发证书。
Visual Studio 还会自动启动您选择的浏览器并导航到第一个 URL。如果您使用的是 VS Code,您需要手动启动 Chrome。
- 输入地址 https://localhost:5131/data 并注意返回了一些 JSON。
- 输入地址 https://localhost:5131/welcome 并注意返回了一个网页。
- 在命令提示符或终端中,按 Ctrl + C 关闭网络服务器,并注意写入的消息,如以下输出中突出显示的内容:
- 如果您需要信任本地自签名的 SSL 证书,请在命令行或终端中输入以下命令: dotnet dev-certs https –trust 。
- 注意消息请求信任 HTTPS 开发证书。您可能会被提示输入密码,并且可能已经存在有效的 HTTPS 证书。
启用更严格的安全性并自动将 HTTP 请求重定向到 HTTPS 是一种良好的做法。
良好实践:一个可选但推荐的安全增强是 HTTP 严格传输安全(HSTS),您应该始终启用它。如果一个网站指定了它并且浏览器支持它,那么它会强制所有通信通过 HTTPS 进行,并防止访问者使用不受信任或无效的证书。
现在就来做吧:
- 在 Program.cs 中,在构建 app 的语句之后,添加一个区域和一个 if 语句,以在非开发环境中启用 HSTS,并将 HTTP 请求重定向到 HTTPS,如以下代码中突出显示的内容所示:
- 使用 https 启动配置启动 Northwind.Web 网站项目而不进行调试。
- 如果 Chrome 仍在运行,请关闭并重新启动它。
- 在 Chrome 中,显示开发者工具,然后点击网络标签。
- 输入地址 http://localhost:5130/ ,并注意服务器如何以 307 临时重定向响应到 https://localhost:5131/ ,以及证书是有效且受信任的,如图 13.3 所示:
图 13.3:连接现在使用有效证书和 307 重定向进行安全保护
- 关闭 Chrome 并关闭网络服务器。
良好实践:记得在完成网站测试后,通过切换到命令提示符或终端并按 Ctrl + C 来关闭 Kestrel 网络服务器。
在 ASP.NET Core 5 及更早版本中,项目模板设置了一条规则,表示在开发模式下,任何未处理的异常将在浏览器窗口中显示,以便开发人员查看异常的详细信息,如以下代码所示:
使用 ASP.NET Core 6 及更高版本,此代码由 WebApplication 构建器默认配置,因此会自动执行,因此在项目模板 Program.cs 源代码中不再需要。
ASP.NET Core 如何知道我们何时在开发模式下运行,以便 IsDevelopment 方法返回 true ,并且这段额外代码执行以设置开发者异常页面?让我们来看看。
ASP.NET Core 可以从设置文件和环境变量中读取,以确定使用哪个托管环境,例如 DOTNET_ENVIRONMENT 或 ASPNETCORE_ENVIRONMENT 。
您可以在本地开发期间覆盖这些设置:
- 在 Northwind.Web 文件夹中,展开名为 Properties 的文件夹,并打开名为 launchSettings.json 的文件。请注意, https 启动配置将托管环境的环境变量设置为 Development ,如下所示在以下配置中突出显示:
- 将 ASPNETCORE_ENVIRONMENT 环境变量从 Development 更改为 Production 。
- 如果您正在使用 Visual Studio,可以选择将 launchBrowser 更改为 false 以防止 Visual Studio 自动启动浏览器。当您使用 dotnet run 或 Rider 启动网站项目时,此设置将被忽略。
- 在 Program.cs 中,将第一个 MapGet 语句修改为返回环境的名称,而不是 Hello World ,如下代码中所示的高亮部分:
使用 https 启动配置启动网站项目,并注意托管环境为 Production ,如下所示的输出:
- 在 Chrome 中,请注意纯文本是 Environment is Production 。
- 关闭网络服务器。
- 在 launchSettings.json 中,将环境变量更改回 Development ,并将更改保存到文件中。
更多信息:您可以通过以下链接了解有关环境的更多信息:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。