首页 > 编程语言 >ASP.NET网站设计

ASP.NET网站设计

时间:2022-12-29 19:00:38浏览次数:46  
标签:ASP 网站 中间件 视图 文件夹 Details cshtml NET View

ASP.NET网站设计

 

 

Model→View数据传递

方式

数据从Controller传递到View的方法

l 使用ViewData;

l 使用ViewBag;

l 使用强类型模型对象,也称为强类型视图;

 

视图发现

 

HomeController对应Home文件夹、StudentController对应Student文件夹;

所有HomeController的视图都位于Views文件夹中的Home文件夹内;

所有StudentController的视图都位于Views文件夹中的Student文件夹内;

Controller中的每一个操作方法对应一个cshtml视图文件;

Details()方法对应Details.cshtml文件,Edit()方法对应Edit.cshtml视图文件;

 

举例

HomeController类;

Details()方法会调用View()方法,返回一个视图;

View()方法是由基类Controller提供的;

Details()操作方法会返回一个视图,因此默认情况下,MVC会查找具有相同名称且扩展名为.cshtml的视图文件;

按照指定顺序在以下两个位置查找:/Views/Home/文件夹中,/Views/Shared/文件夹;

如果找不到视图文件,则会报错;The view ‘Details’was not found;

自定义

按名称查找

自定义视图发现(指定名称查找):

View(string viewName)的重载版本;

public ViewResult Details(){return View(“Test”);}

MVC就会查找Test.cshtml而不是Details.cshtml的视图文件;

如果没有找到指定的视图名称,就会按照操作方法名去查找Details.cshtml;

 

按路径查找

public ViewResult Details(){return View(“MyViews/Test.cshtml”);}

public ViewResult Details(){return View(“/MyViews/Test.cshtml”);}✔推荐

public ViewResult Details(){return View(“~/MyViews/Test.cshtml”);}✔推荐

使用绝对路径,必须加上视图的扩展名.cshtml;

使用绝对路径,MVC会从项目的根目录开始搜索;

public ViewResult Details(){return View(“../../MyViews/Test.cshtml”);}

View(object model)将模型数据从控制器传递到视图;

View(string viewName,object model)指定视图名称,和要传递的模型数据;

ViewData✖

ViewData是弱类型的字典对象;

使用string类型的键值来存储和查询ViewData字典中的数据;

可以从ViewData直接访问数据,而无需转换为string类型;

如果访问的是其他类型数据,则要显式转换为需要的类型;

ViewData在运行时进行动态解析,而不会提供编译时的检查,因此没有智能提示;

这会导致代码编写速度降低,容易出现拼写错误;

并且只能在运行时知道这些错误;

因此,不常使用ViewData;

当使用ViewData的时候,要创建一个弱类型的视图;

ViewBag✖

ViewBag是ViewData的包装器;

ViewData通过string类型的键值来存储查询数据;

ViewBag,使用动态属性而不是字符串键值;

要将ViewBag的数据从HomeController的Details()操作方法传递到View;

在View中,同样使用动态属性访问数据成员;

对比

ViewData和ViewBag的对比:

二者都可以将Controller数据传递到View;

二者都是弱类型的视图;

二者都是在运行时动态解析;

二者不提供编译时类型检查,不能的到智能提示;

ViewBag是ViewData的包装器;

ViewData使用字符串键值,ViewBag使用动态属性;

 

强类型视图✔

@model MockSchoolManagement.Models.Student

@Model.Name @ViewBag.PageTitle @Model.Email @Model.Major

优点:

提供编译时的类型检查和智能提示;

减小错误几率,提高工作效率;

因此,建议始终使用强类型视图,将数据从控制器传递到视图

ViewModel

Model对象可能无法包含所有数据;

无法包含的数据要通过ViewData或者ViewBag传递,又变成了弱类型视图,又容易出错了;

创建一个ViewModel对象,将所有数据包含进去;

通常创建一个文件夹ViewModels,专门存放所有ViewModel;

布局视图

Header头部、Footer页脚、Menu导航菜单、View具体内容的视图;

如果没有布局视图,那么将在每个视图中重复显示很多内容;

使用布局视图,会让所有视图布局一致,并且便于修改;

布局视图也是一个后缀为.cshtml的文件,默认文件名_Layout.cshtml;

这种下划线开头的视图文件,不是直接面向浏览器的,因此用户无法直接访问他们;

布局视图相当于WebForm中的母版页;

布局视图不属于特定控制器,因此放在Views/Shared/文件夹中;

一个ASP程序可以包含多个布局视图;

_ViewStart.cshtml

_ViewStart.cshtml可以放置多份;

支持分层功能,文件夹中的视图优先使用本文件夹中的_ViewStart.cshtml文件,本文件夹没有,再逐层向上调用;

或者本文件夹中的_ViewStart.cshtml会覆盖掉上级文件夹中的_ViewStart.cshtml;

这样,可以为不同文件夹中的视图指定不同的布局了;✔

子文件中的_ViewStart.cshtml将覆盖Views文件夹中的_ViewStart.cshtml

_ViewImports.cshtml

用于包含公共命名空间,因此不必在每个视图中引用这些命名空间;

@using指令用于包含公共命名空间;

_ViewImports.cshtml还支持以下指令:

@addTagHelper @removeTagHelper @tagHelperPrefix @model @inherits @inject

_ViewImports.cshtml也支持分层功能,除了可以放在Views文件夹中,在其他子文件夹中放置不同的_ViewImports.cshtml;

子文件中的_ViewImports.cshtml将覆盖Views文件夹中的_ViewImports.cshtml

路由

MVC中的两种路由技术:常规路由、属性路由;

路由的定义:浏览器发出请求到达ASP程序,控制器处理传入的请求,将请求URL映射到控制器的操作方法上。这个映射过程就叫路由;

http:://localhost:13380/Home/Details/1

Home将映射到HomeController控制器,Details将映射到Details()操作方法,1将自动映射到id;也就是调用HomeController类中的Details(int id)方法;

 

app.UseMvcWithDefaultRoute();

默认路由模板规则:{controller=Home}/{action=Index}/{id?}

http:://localhost:3290/Student/Details/1

第一个路径段/Student,是在URL中的控制器名称,没有Controller。而MVC会自动添加Controller,然后再按照完整的关键字StudentController进行查找;

第二个路径段/Details,映射到StudentController的Details(int id)方法;

第三个路径段/1,映射到操作方法的参数id;

这个步骤被称为模型绑定

路由模板中id后面的问号?,表示该参数是可选参数;

controller=Home表示controller默认值是Home;

action=Index表示action默认值是Index;

 

 

 

 

依赖注入

容器服务

AddSingleton单例模式,程序只创建依次Singleton服务;

AddTransient暂时模式,每次请求都会创建一个新的Transient实例;

AddScoped范围模式,在范围内,每次请求创建一个新的实例;

优点

降低耦合;让代码易于测试;面向对象机制;

 

中间件

定义

中间件是一个可以处理HTTP请求或响应的软件管道;

举例

Startup.cs中Configure方法的中间件:

app.UseDeveloperExceptionPage();  app.UseStaticFiles();

 app.UseMiddleware(); app.UseCors();

 app.UseSwagger(); app.UseSwaggerUI(); app.UseRouting(); app.UseEndpoints();

原理

中间件可以同时处理传入请求和传出响应;

中间件处理传入请求,然后将该请求传递给下一个中间件,以进行下一步处理;

终端中间件terminal middleware传递的最后一个中间件;

中间件可以对传入的HTTP请求进行响应;中间件可以处理传出响应;

中间件按照添加到管道中的顺序执行;

大型团队中,中间件应该以NuGet包的形式提供;

Run方法注册的中间件是终端中间件,无法调用下一个中间件;

总结

ASP中间件,可以被 同时访问和请求;既可以被访问,也可以被请求;

可以处理请求,并传递给下一个;

可以处理请求,并完成传递;

可以处理传出响应;

按照添加顺序执行;

工作流程

所有请求都在中间件调用next方法之前除法;

请求按照顺序依次穿越管道;

当中间件处理请求并产生响应时,请求处理流程在管道中反向传播;

所有响应都在调用next之后触发,响应依次穿过所有管道;

 

 

基础

入口

Program.cs

ASP项目的入口

 public static void Main(string[] args)

        {           CreateWebHostBuilder(args).Build().Run();        }

开始

Startup.cs

// This method gets called by the runtime. Use this method to add services to the container.

public void ConfigureServices(IServiceCollection services)

  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

环境变量

Properties/launchSettings.json

"windowsAuthentication": false,启用windows身份验证

    "anonymousAuthentication": true,启用匿名身份验证

  "profiles": {

    "IIS Express": {

      "commandName": "IISExpress",

      "launchBrowser": true,

      "environmentVariables": {

        "ASPNETCORE_ENVIRONMENT": "Development"

      }

appsettings.json

appsettings.Development.json

  "Logging": {

    "LogLevel": {

      "Default": "Debug",

      "System": "Information",

      "Microsoft": "Information"

用户机密

secrets.json

保存密钥、保存数据库的地址、账号、密码;

右击项目名称→管理用户及密;

C:\Users\Administrator\AppData\Roaming\Microsoft\UserSecrets\e166b10e-3884-4bef-8cbf-c60863aa72ff\secrets.json

依赖注入

IConfiguration

  public Startup(IConfiguration configuration, IWebHostEnvironment env)

{  Configuration = configuration; GlobalContext.LogWhenStart(env);           GlobalContext.HostingEnvironment = env;        }

在Startup的构造函数中,注入的IConfiguration服务,采用的是依赖注入的形式;

IConfiguration服务是为了,从ASP中所有配置资源读取配置信息而设计的;

如果多个配置资源中,有重名的配置项,则后面的配置将覆盖前面的值;

 WebHost.CreateDefaultBuilder(args)在程序启动时,会自动调用,按照特定顺序读取配置资源;

配置信息读取顺序:

1. appsettings.json;

2. appsettings.Development.json;

3. 用户机密;

4. 环境变量;

5. 命令行参数;

 

 

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

GMT(格林尼治标准时间) GMT一般指世界时。

标签:ASP,网站,中间件,视图,文件夹,Details,cshtml,NET,View
From: https://www.cnblogs.com/zhangdezhang/p/17013285.html

相关文章

  • netstat -st输出解析
    转载自:http://perthcharles.github.io/2015/11/10/wiki-netstat-proc/netstat-st输出的两个重要信息来源分别是/proc/net/snmp和/proc/net/netstat本文将分类整理这些co......
  • windows10 安装 IIS 部署 asp.net core项目
     安装IIShttps://blog.csdn.net/qq_39953519/article/details/114371495这里写的比较详情 PublishASP.NetCore6.0MVCtoIISinVisualStudio2022 我按照......
  • 折腾了我一周,原来Netty网络编程就是这么个破玩意儿!!!
    1、阻塞阻塞模式下,相关方法都会导致线程暂停ServerSocketChannel.accept会在没有连接建立时让线程暂停SocketChannel.read会在通道中没有数据可读时让线程暂停阻塞......
  • .NET Core 实现后台任务(定时任务)
    IHostedService和BackgroundService前言平时写代码的时候,大家多多少少都会遇到定时任务的要求,今天介绍两种定时任务的写法,严格来说其实是一种。相对来说比较粗糙,请多多......
  • 学习.NET MAUI Blazor(三)、创建.NET MAUI Blazor应用并使用AntDesignBlazor
    大致了解了Blazor和MAUI之后,尝试创建一个.NETMAUIBlazor应用。需要注意的是:虽然都叫MAUI,但.NETMAUI与.NETMAUIBlazor并不相同,MAUI还是以xaml为主,而MAUIBlazor则是......
  • .NET中使用JWT
    在控制台中使用JWT新建测试项目并安装包dotnetnewslndotnetnewconsoledotnetslnadd.dotnetaddpackageSystem.IdentityModel.Tokens.Jwt生成JWT的代码///......
  • Kubernetes 网络模型基础指南
    Kubernetes是为运行分布式集群而建立的,分布式系统的本质使得网络成为Kubernetes的核心和必要组成部分,了解Kubernetes网络模型可以使你能够正确运行、监控和排查应用程......
  • 有趣网站分享
     有趣网站分享1http://zhongguose.com/点击前往可以直接在网站中查看到极多中国风颜色以及其属性https://convertio.co/点击前往功能强大的文件转换器,支持超......
  • 终极.NET混淆器丨.NET Reactor产品介绍
    无与伦比的.NET代码保护系统,可完全阻止任何人反编译您的代码。  产品优势01、混淆技术.NETReactor通过向.NET程序集添加不同的保护......
  • .Net6 WebApi使用SqlSugar
    1、Nuget先引入:SqlSugarCore2、NetIOC1、注入ISqlSugarClient.NET自带的IOC使用也很方便 先封装一个操作类  //建一个扩展类publicstaticclassSqlsugarS......