热门 ASP.NET 面试问题

发布:2024-09-10 15:58 阅读:1790 点赞:0

一、什么是 ASP.NET?

ASP.NET 是微软的一个框架,用于构建 Web 应用程序。ASP.NET 是 .NET Framework 的一部分。ASP.NET 和 Web Forms 用于构建前端,而在后端则使用 C# 语言。ASP.NET 运行在 Web 服务器上,如 IIS。

ASP.NET 的优点

  • 代码与 HTML 的分离:ASP.NET 允许完全分离布局和业务逻辑,这使得程序员和设计师团队能够更高效地协作。
  • 支持编译语言:开发人员可以使用 VB.NET 并访问诸如强类型和面向对象编程等功能。使用编译语言意味着 ASP.NET 页面不会遭受解释代码相关的性能损失。
  • 使用 .NET Framework 提供的服务:.NET Framework 提供了类库,可以由应用程序使用,包括输入/输出、操作系统服务访问、数据访问或调试等关键类。
  • 图形化开发环境:Visual Studio .NET 为 Web 开发者提供了丰富的开发环境,你可以像在 Visual Basic 6 中那样拖放控件并设置属性,并且有完整的 IntelliSense 支持。
  • 状态管理:ASP.NET 提供了解决方案来管理会话和应用程序状态。状态信息可以存储在内存中或数据库中,甚至可以在服务器故障或连接中断后恢复。
  • 在服务器运行时更新文件:应用程序组件可以在服务器在线并且客户端连接时更新。框架会在文件复制到应用程序后立即使用新文件。
  • 基于 XML 的配置文件:ASP.NET 的配置设置存储在易于读取和编辑的 XML 文件中。你可以轻松地将它们与其他应用程序文件一起复制到另一台服务器。

ASP.NET 概述

  • ASP.NET 提供了创建、部署和执行 Web 应用程序和服务所需的服务。
  • 像 ASP 一样,ASP.NET 是一种服务器端技术。
  • Web 应用程序使用 Web Forms 构建。ASP.NET 提供了内置的 Web Forms 控件,用于生成用户界面。如果这些控件不符合需求,你可以创建自己的用户控件。
  • Web Forms 被设计成使得构建 Web 应用程序像构建 Visual Basic 应用程序一样简单。

二、ASP.NET 中有哪些不同的验证器?

ASP.NET 验证控件用于验证用户输入的数据。每当用户给出输入时,都应在发送到应用程序的其他层之前进行验证。如果未经过验证就接收用户输入,可能会导致错误的数据传输。因此,从用户那里获取输入时进行验证是一个好主意。ASP.NET 中有两种类型的验证:

  • 客户端验证(Client-Side Validation):当验证在客户端浏览器上完成时,称为客户端验证。我们使用 JavaScript 进行客户端验证。
  • 服务器端验证(Server-Side Validation):当验证在服务器上完成时,称为服务器端验证。服务器端验证是一种安全的验证形式。主要优点是即使用户绕过了客户端验证,我们仍然可以在服务器端捕获问题。

以下是一些 ASP.NET 中的验证控件:

  • RequiredFieldValidator 控件
  • CompareValidator 控件
  • RangeValidator 控件
  • RegularExpressionValidator 控件
  • CustomValidator 控件
  • ValidationSummary 控件

三、什么是视图状态(View State)?

视图状态是一种在往返之间保留页面和控件值的方法。这是一种页面级别的状态管理技术。视图状态默认开启,并且通常序列化页面上每个控件的数据,无论是否在回发期间实际使用。

Web 应用程序是无状态的,这意味着每次请求服务器获取页面时都会创建一个新的页面实例,并且在往返之后页面会立即丢失。

视图状态的特点

  • 在回发后无需使用会话即可保留控件的值。
  • 存储页面和页面上定义的控件属性的值。
  • 创建自定义的视图状态提供程序,可以让你将视图状态信息存储在 SQL Server 数据库或其他数据存储中。

视图状态的优点

  • 易于实现。
  • 不需要服务器资源:视图状态包含在一个页面加载过程中的结构内。
  • 增强的安全功能:它可以被编码、压缩或使用 Unicode 实现。

四、ASP.NET 中有哪些不同的会话状态管理选项?

状态管理在 ASP.NET 中非常重要,因为每次页面回发到服务器时都会创建一个新的 Web 页面类实例。在传统的 Web 编程中,所有与页面相关的信息以及页面上的控件都会在每次往返过程中丢失。.NET 框架包括几种选项来帮助你在每页的基础上以及应用程序范围内保存数据。这些选项可以大致分为两类:

  • 客户端状态管理选项:涉及将信息存储在页面或客户端计算机上。一些基于客户端的状态管理选项包括:隐藏字段、视图状态、Cookie 和查询字符串。
  • 服务器端状态管理:在某些情况下,你需要在服务器端存储状态信息。服务器端状态管理使你能够在服务器上管理应用程序相关和会话相关信息。ASP.NET 提供了以下选项来管理服务器端的状态:应用程序状态和会话状态。

五、ASP.NET 中的缓存是什么?

缓存是 ASP.NET 中最有趣的概念之一。如果你能妥善处理缓存,你可以根据需求运行任何 Web 应用程序。缓存是指将页面生成的输出存储在内存中,这样保存的输出(缓存)将在未来服务于我们(用户)。

缓存的类型: 缓存主要包括以下几种类型:

  • 输出缓存(Output Caching):缓存页面输出的结果。
  • 数据缓存(Data Caching):缓存数据库查询结果或其他数据源的结果。
  • HTTP 协议缓存(HTTP Protocol Caching):利用 HTTP 协议中的缓存机制。
  • 依赖缓存(Dependency Caching):当缓存项依赖的某个文件或其他资源发生变化时,缓存项将被刷新。
  • 查询字符串缓存(Query String Caching):基于查询字符串参数的缓存。
  • 滑动窗口缓存(Sliding Window Caching):缓存项的有效期基于最近的访问时间。

缓存可以极大地提高应用程序的性能,因为它减少了对数据库和其他昂贵资源的频繁访问,同时提高了响应速度。

六、如何在 ASP.NET 应用程序中应用主题?

主题是一组定义控件和网页外观的设置。这些主题可以应用于整个 Web 应用程序的所有页面,以保持一致的外观。主题包括图像和皮肤文件;皮肤文件设置了 ASP.NET 控件的视觉属性。

主题的两种类型

  • 页面主题(Page Theme):页面主题包含控制皮肤、样式表、图形文件和其他资源,位于解决方案资源管理器窗口中的 App_Theme 文件夹的子文件夹内。页面主题应用于网站的单个页面。
  • 全局主题(Global Theme):全局主题是应用于 Web 服务器上所有网站的主题,包括属性设置和图形。此主题允许我们维护同一 Web 服务器上的所有网站,并为所有网页定义相同的样式。

七、什么是 MVC?

模型-视图-控制器(MVC)是一种将应用程序划分为以下三个主要组件的模式:

  • 模型(Model):模型代表业务逻辑,通常包含数据和业务规则。
  • 视图(View):视图是模型的表示形式,负责展示给用户看的数据。
  • 控制器(Controller):控制器处理用户输入,并控制模型和视图之间的交互。

ASP.NET MVC 框架为创建 Web 应用程序提供了不同于 ASP.NET Web Forms 模式的另一种选择。ASP.NET MVC 框架是一个轻量级、高度可测试的展示框架,它(与基于 Web Forms 的应用程序一样)集成了现有的 ASP.NET 特性,如母版页和基于成员资格的身份验证。

MVC 框架定义在 System.Web.MVC 组件集中。它提供了对 HTML、JavaScript 和 CSS 的完全控制。对于大规模的应用程序来说,这是一个更好的也是推荐的方法,特别是当不同的团队协同工作时。

ASP.NET MVC 框架的优势

  • 通过将应用程序分为模型、视图和控制器,很容易管理复杂性。
  • 不使用视图状态或基于服务器的表单。
  • 对 HTML、JavaScript 和 CSS 提供完全控制。
  • 提供更好的测试驱动开发(TDD)支持。
  • 对于需要高度控制应用程序行为的大规模开发团队和 Web 设计师来说,表现良好。
  • 默认支持 Facebook 和 Google 认证。
  • 容易管理大型应用程序,将其划分为多个区域。

八、ASP.NET 中的 Cookie 是什么?

Cookie 是一种状态管理技术,可以在回发后存储控件的值。Cookie 可以在客户端机器上存储用户特定的信息,例如用户上次访问您的站点的时间。Cookie 也被称为 HTTP Cookie、浏览器 Cookie、Web Cookie、会话 Cookie 等。基本上,Cookie 是由 Web 服务器发送并由 Web 浏览器保存在客户端机器上的小文本文件。

httpsCookies 类的属性列表

  • Domain:使用这些属性,我们可以设置 Cookie 的域名。
  • Expires:此属性设置 Cookie 的过期时间。
  • HasKeys:如果 Cookie 有一个子键,则返回 True。
  • Name:包含键的名称。
  • Path:包含要与 Cookie 一起提交的虚拟路径。
  • Secured:如果 Cookie 要通过安全连接传递,则仅返回 True。
  • Value:包含 Cookie 的值。

Cookie 的限制

  • Cookie 的大小限制为 4096 字节。
  • 单个网站可以使用总共 20 个 Cookie。

九、ASP.NET 中的 Ajax 是什么?

Ajax 代表异步 JavaScript 和 XML;换句话说,Ajax 是 JavaScript、CSS、XHTML、DOM 等各种技术的组合。Ajax 允许网页通过后台与服务器交换少量数据来异步更新。这意味着可以在不重新加载整个页面的情况下更新网页的部分内容。我们也可以将 Ajax 定义为一种组合客户端技术,它在用户界面和 Web 服务器之间提供了异步通信,从而实现了部分页面渲染而不是完整的页面回发。

Ajax 是平台独立的;换句话说,Ajax 是一种跨平台技术,由于它是基于 XML 和 JavaScript 的,所以可以在任何操作系统上使用。它还支持其他技术的开源实现。它部分渲染页面到服务器而不是完整页面回发。我们使用 Ajax 来开发更快、更好和更具交互性的 Web 应用程序。Ajax 使用 https 请求在 Web 服务器和浏览器之间通信。

使用 Ajax,当用户点击按钮时,可以使用 JavaScript 和 DHTML 立即更新用户界面,并启动一个异步请求到服务器获取结果。当响应生成时,可以使用 JavaScript 和 CSS 更新用户界面,而不需要刷新整个页面。在此过程中,用户屏幕上的表单不会闪烁、闪烁、消失或停滞。Ajax 的强大之处在于它可以使用 XMLhttpsRequest 对象与服务器异步通信,而不需要刷新浏览器。

本质上,Ajax 将 JavaScript 技术和 XMLhttpsRequest 对象置于您的 Web 表单和服务器之间。

十、ASP.NET 中的 Web 服务是什么?

Web 服务是一种软件程序,它使用 XML 通过常见的互联网协议与其他软件交换信息。简单地说,Web 服务是通过 Internet 与对象交互的一种方式。Web 服务具有以下特点:

  • 语言无关。
  • 协议无关。
  • 平台无关。
  • 假设无状态服务架构。
  • 可扩展(例如,从乘法两个数字到整个客户关系管理系统)。
  • 可编程(封装任务)。
  • 基于 XML(开放的、基于文本的标准)。
  • 自描述(用于访问和使用的元数据)。
  • 可发现(通过注册表搜索和定位所需的 Web 服务)。这是基于 UDDI 的。

关键的 Web 服务技术

  • XML:仅描述数据。因此,任何理解 XML 的应用程序——无论其编程语言或平台——都有能力以多种方式格式化 XML(格式良好或有效)。
  • SOAP:提供服务和应用程序之间的通信机制。
  • WSDL:提供了一种统一的方法来描述 Web 服务,以便其他程序使用。
  • UDDI:启用可搜索的 Web 服务注册表的创建。

十一、ASP.NET 的优势是什么?

ASP.NET 提供了创建、部署和执行 Web 应用程序和 Web 服务(如 ASP)所需的服务。ASP.NET 是一种服务器端技术。Web 应用程序使用 Web Forms 构建。ASP.NET 提供了内置的 Web Forms 控件,这些控件负责生成用户界面。它们类似于典型的 HTML 小部件,如文本框或按钮。如果这些控件不符合你的需求,你可以自由创建自己的用户控件。

ASP.NET 的优点

  • 代码与 HTML 的分离:ASP.NET 允许完全分离布局和业务逻辑,这使得程序员和设计师团队能够更高效地协作。
  • 支持编译语言:开发人员可以使用 VB.NET 并访问诸如强类型和面向对象编程等功能。使用编译语言意味着 ASP.NET 页面不会遭受解释代码相关的性能损失。
  • 使用 .NET Framework 提供的服务:.NET Framework 提供了类库,可以由应用程序使用,包括输入/输出、操作系统服务访问、数据访问或调试等关键类。
  • 图形化开发环境:Visual Studio .NET 为 Web 开发者提供了丰富的开发环境,你可以像在 Visual Basic 6 中那样拖放控件并设置属性,并且有完整的 IntelliSense 支持。
  • 在服务器运行时更新文件:应用程序组件可以在服务器在线并且客户端连接时更新。框架会在文件复制到应用程序后立即使用新文件。
  • 基于 XML 的配置文件:ASP.NET 的配置设置存储在易于读取和编辑的 XML 文件中。你可以轻松地将它们与其他应用程序文件一起复制到另一台服务器。

十二、.NET 中的全球化和本地化概念是什么?

本地化(Localization)指的是“为特定文化翻译资源的过程”,而全球化(Globalization)则是指“设计可以适应不同文化的程序的过程”。

适当的全球化:你的应用程序应该能够接受、验证并显示各种全球数据,并且也应该能够相应地操作这些数据。 本地化和本地化能力:本地化能力指的是清晰地将与用户界面及其他操作有关的文化特异性组件与可执行代码分开。

.NET 框架极大地简化了针对多文化客户的应用程序创建任务。在创建全球化和本地化应用程序时涉及的命名空间包括:

  • System.Globalization
  • System.Resources
  • System.Text

十三、ASP.NET 中的 Web.config 文件是什么?

配置文件用于管理定义网站的各种设置。设置存储在与应用程序代码分开的 XML 文件中。这样,您可以独立于代码配置设置。通常,一个网站包含一个存储在应用程序根目录内的 Web.config 文件。然而,可以有许多配置文件在应用程序的不同级别管理设置。

配置文件的用途: ASP.NET 配置系统用于描述 ASP.NET 应用程序各个方面特性和行为。配置文件帮助您管理与网站相关的设置。每个文件都是一个 XML 文件(带有 .config 扩展名),其中包含一组配置元素。配置信息存储在基于 XML 的文本文件中。

基于 XML 的配置文件的好处: ASP.NET 配置系统是可扩展的,并且可以轻松存储和检索应用程序特定的信息。它是人类可读的。 当配置文件中的设置更改时,不需要重启 Web 服务器。ASP.NET 会自动检测更改并将它们应用于正在运行的 ASP.NET 应用程序。 您可以使用任何标准文本编辑器或 XML 解析器来创建和编辑 ASP.NET 配置文件。

十四、ASP.NET 中的应用域(App Domain)概念是什么?

ASP.NET 引入了称为应用域(AppDomain)的概念。它可以被认为是一个既作为容器又作为边界的轻量级进程。.NET 运行时使用 AppDomain 作为代码和数据的容器,就像操作系统使用进程作为代码和数据的容器一样。正如操作系统使用进程来隔离不良行为的代码一样,.NET 运行时使用 AppDomain 来在安全边界内隔离代码。

CLR 可以允许多个 .NET 应用程序在一个单一的 AppDomain 中运行。多个 AppDomain 可以存在于 Win32 进程中。

如何创建 AppDomain? AppDomain 是使用 CreateDomain 方法创建的。AppDomain 实例用于加载和执行程序集(Assembly)。当 AppDomain 不再使用时,可以卸载它。

下面是一个简单的示例代码来创建和使用 AppDomain:

using System;

public class MyAppDomain : MarshalByRefObject
{
    public string GetInfo()
    {
        return AppDomain.CurrentDomain.FriendlyName;
    }
}

public class MyApp
{
    public static void Main()
    {
        AppDomain apd = AppDomain.CreateDomain("Rajendrs Domain");
        MyAppDomain apdinfo = (MyAppDomain)apd.CreateInstanceAndUnwrap(
            Assembly.GetExecutingAssembly().FullName, 
            "MyAppDomain"
        );
        Console.WriteLine("Application Name = " + apdinfo.GetInfo());
    }
}

十五、ASP.NET 中的查询字符串(Query String)是什么?

查询字符串是一组字符输入到计算机或 Web 浏览器中。当我们希望从一个页面向另一个页面传递一个值时,查询字符串是非常有用的。当我们需要在 ASP.NET 上下文中的 HTML 页面或 aspx Web Forms 之间传递内容时,查询字符串易于使用,并且查询字符串遵循一个分隔符,通常是问号 (?)。它主要用于识别出现在此分隔符号后的数据。

查询字符串集合用于检索 https 查询字符串中的变量值。如果我们想要传递大量的数据,那么就不能使用 Request.QueryString。查询字符串也可以由表单提交生成或由用户在浏览器地址栏中输入查询产生。

查询字符串的语法

Request.QueryString["variable"][(index).count]

查询字符串的优点

  • 简单实现
  • 从查询字符串获取信息容易
  • 可用于发送或读取跨域(来自不同域)

查询字符串的缺点

  • 人类可读
  • 客户端浏览器对 URL 长度有限制
  • 跨页功能使其变得冗余
  • 容易被最终用户修改

十六、ASP.NET 中的母版页(Master Pages)是什么?

母版页的扩展名为 '.master'。母版页不能直接被客户端访问,因为它只是作为其他内容页的模板。在母版页中,内容可以放置在 ContentPlaceHolder 内部或外部。只有 ContentPlaceHolder 内部的内容可以在内容页中定制。我们可以在一个 Web 应用程序中有多个母版页。一个母版页可以有另一个母版页作为它的母版。

Web 表单的 MasterPageFile 属性可以在 Page_PreInit 事件之前动态设置。设置动态的母版页必须包含在 Web 表单中已定制内容的 ContentPlaceHolder

定义一个母版页可以使用如下代码:

<%@ Master Language="C#" %>

添加母版页到项目中

  1. 向 Web 应用程序添加一个新的母版页文件(例如 MainMaster.master)。
  2. 更改  中的 ContentPlaceHolder 的 ID 为 "cphHead",并将 "ContentPlaceHolder1" 的 ID 更改为 "cphFirst"。
  3. 在母版页中添加另一个 ContentPlaceHolder(例如 cphSecond)。
  4. 向母版页添加一些头部、尾部以及两个内容占位符的默认内容。

示例代码:

<%@ Master Language="C#" %>
html>
<html>
<head runat="server">
    <title>母版页标题title>
    <asp:ContentPlaceHolder ID="cphHead" runat="server">
    asp:ContentPlaceHolder>
head>
<body>
    <form id="form1" runat="server">
        Header...
        <br />
        <asp:ContentPlaceHolder ID="cphFirst" runat="server">
            这是第一个内容占位符(默认)
        asp:ContentPlaceHolder>
        <br />
        <asp:ContentPlaceHolder ID="cphSecond" runat="server">
            这是第二个内容占位符(默认)
        asp:ContentPlaceHolder>
        <br />
        Footer...
    form>
body>
html>

十七、.NET 中的跟踪(Tracing)是什么?

跟踪有助于查看应用程序运行时的问题信息。默认情况下,跟踪是禁用的。跟踪具有以下重要特性:

  • 我们可以使用调试语句查看页面和应用程序的执行路径。
  • 我们可以编程访问和操作跟踪消息。
  • 我们可以看到最近的跟踪数据。

跟踪可以按照以下两种类型进行:

  • 页面级:当跟踪输出显示在页面上时,对于页面级别的跟踪,我们需要在页面级别设置跟踪属性。例如:<%@ Page Trace="true" Language="C#" %>
  • 应用程序级:在应用程序级别的跟踪中,信息存储在应用程序的每个请求中,默认存储的请求数量为 10。如果你想增加请求数量并丢弃旧请求以显示最近的请求,则需要在 web.config 文件中设置属性。例如:

十八、ASP.NET 中有哪些数据控件?

在 ASP.NET 中,具有 DataSource 属性的控件被称为数据控件。ASP.NET 允许强大的数据绑定功能,你可以将任何服务器控件绑定到简单的属性、集合、表达式和/或方法。当你使用数据绑定时,你可以更加灵活地使用来自数据库或其他来源的数据。

数据绑定控件是容器控件。控件 -> 子控件数据绑定是指将控件绑定到数据库中的数据。通过数据绑定,我们可以将控件绑定到数据库表中的特定列,或者将整个表绑定到数据网格。数据绑定提供了一个简单、方便且强大的方法来创建表单上的控件与其应用程序中的数据之间的读写链接。数据绑定允许你将属性、集合、方法调用和数据库查询的结果与你的 ASP.NET 代码集成。

你可以结合数据绑定与 Web 控件的渲染,以减轻围绕 Web 控件创建的编程负担。你还可以使用数据绑定与 ADO.NET 和 Web 控件从 SQL 选择语句或存储过程填充控件内容。

数据绑定使用特殊的语法 <%# %>, 这指示 ASP.NET 评估表达式。数据绑定标签与常规代码插入标签 <% %> 之间的区别在于当表达式被评估时。数据绑定标签内的表达式仅在调用页面对象或 Web 控件的 DataBind 方法时进行评估。

以下是 ASP.NET 中的一些数据绑定控件:

  • Repeater 控件
  • DataGrid 控件
  • DataList 控件
  • GridView 控件
  • DetailsView
  • FormView
  • DropDownList
  • ListBox
  • RadioButtonList
  • CheckBoxList
  • BulletList 等等

十九、global.aspx 文件中的主要事件有哪些?

Global.asax 文件是从 HTTPApplication 类派生的,它维护一个 HTTPApplication 对象池,并根据需要将它们分配给应用程序。Global.asax 文件包含以下事件:

  • Application_Init
  • Application_Disposed
  • Application_Error
  • Application_Start
  • Application_End
  • Application_BeginRequest
  • Application_EndRequest
  • Session_Start
  • Session_End
  • Application_AuthenticateRequest
  • Application_PostAuthenticateRequest
  • Application_PostMapRequestHandler
  • Application_PostSyncEventComplete
  • Application_PreRequestHandlerExecute
  • Application_PostRequestHandlerExecute
  • Application_PreSendRequestHeaders
  • Application_PreSendRequestContent

二十、.NET 中的 CheckBox 控件有什么作用?

CheckBox 控件是一个非常常见的 HTML 控件,与单选按钮不同的是,它可以允许在网页上选择多个项。ASP.NET 中的 CheckBox 控件有很多属性,以下是一些常用的属性:

  • AutoPostBack:指定在 Checked 属性更改后是否应立即发布表单。默认值为 false。
  • CausesValidation:指定当单击按钮控件时页面是否进行验证。
  • Checked:指定复选框是否被选中。
  • InputAttributes:用于 CheckBox 控件的 Input 元素的属性名称和值。
  • LabelAttributes:用于 CheckBox 控件的 Label 元素的属性名称和值。
  • runat:指定控件是一个服务器控件。必须设置为 "server"。
  • Text:复选框旁边的文本。
  • TextAlign:文本应在复选框的哪一侧出现(右或左)。
  • ValidationGroup:当 CheckBox 控件回发到服务器时导致验证的一组控件。
  • OnCheckedChanged:当 Checked 属性更改时要执行的函数名称。

二十一、ASP.NET 中的认证(Authentication)和授权(Authorization)是什么?

认证是证明用户真实性的过程,而授权是授予用户对资源访问权限的过程。在 ASP.NET 中,认证意味着识别用户,换句话说,就是验证该用户是否存在于你的数据库中,并且确实是正确的用户。授权意味着用户是否拥有访问 IIS 网站上的某个资源的权限。资源可以是 ASP.NET 网页、媒体文件(如 MP4、GIF、JPEG 等)、压缩文件(如 ZIP、RAR 等)等等。

在 ASP.NET 中,有三种认证和授权的方式:

  • Windows 认证:在这种方法中,ASP.NET 网页将使用本地 Windows 用户和组来进行资源的认证和授权。

  • 表单认证(Forms Authentication):这是一种基于 Cookie 的认证方式,用户名和密码存储在客户端机器上的 Cookie 文件中,或者通过 URL 在每次请求时发送。基于表单的认证向用户呈现一个基于 HTML 的网页,提示用户提供凭据。

  • Passport 认证:Passport 认证基于微软提供的 Passport 网站。当用户登录时,凭据会被发送到 Passport 网站(例如 Hotmail、DevHood、Windows Live 等),在那里进行认证。如果认证成功,它会返回一个令牌给你的网站。

  • 匿名访问:如果你不希望有任何类型的认证,则可以选择匿名访问。

在 'web.config' 文件中,可以设置认证模式为 'Windows',如下所示:

<authentication mode="Windows"/>

同时,还需要确保除了授权用户外所有用户都被拒绝访问。以下代码片段展示了在授权标签内所有的用户都被拒绝访问的情况。'?' 表示任何未知用户。

<authorization>
   <deny users="?"/>
authorization>

二十二、ASP.NET 中的 HTML 服务器控件是什么?

Microsoft .NET Framework 提供了一套丰富的服务器端控件,用于开发 Web 应用程序。你可以像在表单中添加 Windows 控件一样将这些控件添加到 WebForms 页面中。服务器端控件通常被称为服务器控件或 Web Forms 控件。有四种类型的服务器控件:HTML 服务器控件、Web 服务器控件、验证控件和用户控件。

HTML 服务器控件:HTML 开发人员必须熟悉他们用来编写 HTML GUI 应用程序的老式 HTML 控件。这些控件是相同的 HTML 控件;你可以通过定义 runat="server" 属性在服务器上运行这些控件。这些控件的名称以 Html 开头。

控件 描述
HtmlForm 创建一个 HTML 表单控件,用作其他控件的占位符。
HtmlInputText 创建一个输入文本框控件,用于从用户那里获取输入。
HtmlTextArea 创建一个多行文本框控件。
HtmlAnchor 创建 Web 导航。
HtmlButton 创建一个按钮控件。
HtmlImage 创建一个图像控件,用于显示图像。
HtmlInputCheckBox 创建一个复选框控件。
HtmlInputRadioButton 创建一个单选按钮控件。
HtmlTable 创建一个表格控件。
HtmlTableRow 创建表格中的一行。
HtmlTableCell 创建行中的一个单元格。

二十三、ASP.NET 中的安全认证模式有哪些?

当你开始为一个客户使用 ASP.NET 编写程序时,你应该考虑安全性。安全性是任何应用程序的重要组成部分之一。特别是当你在制作暴露给数百万用户的 Web 应用程序时,安全性更为重要。ASP.NET 提供了类和方法来确保应用程序免受外部攻击。

在 web.config 文件中,你可以设置认证模式值为 'Windows' 或 'Forms'。关于它们的区别及如何使用:

  • Windows 认证模式:提供了基于 Windows 用户帐户来认证用户的能力。这是 ASP.NET 默认提供的认证模式。这将返回计算机名和用户名。

示例代码:

<authentication mode="Windows">
   <forms name="AuthenticationDemo" loginUrl="logon.aspx" protection="All" path="/" timeout="30" />
authentication>
  • 表单认证模式:插入  标签,并填写相应的属性。

示例代码:

<authentication mode="Forms">
   <forms name="AuthenticationDemo" loginUrl="logon.aspx" protection="All" path="/" timeout="30" />
authentication>

二十四、ASP.NET 中的 Web API 是什么?

Web API 是微软提供的一个框架,用于编写 HTTPS 服务。有许多框架可用于构建基于 HTTPS 的服务。它们遵循国际标准化的通用指南,但具有不同的风味。例如,所有框架都必须遵守这些状态码:

  • 1xx - 信息性消息
  • 2xx - 成功
  • 3xx - 重定向
  • 4xx - 客户端错误
  • 5xx - 服务器错误

特点

  • 它很轻量级,因此也适用于小型设备,如平板电脑和智能手机。
  • 不需要像 WCF REST 那样繁琐和广泛的配置。
  • MediaTypeFormatter 使得配置你的 API 响应类型变得简单(如 JSON、XML 等)。
  • 不再依赖 IIS 托管,也可以在应用程序内部托管。
  • 使用 HTTPS 特性(如缓存、版本控制、请求/响应头及其各种内容格式)轻松简单。
  • 支持内容协商(决定客户端可以接受的最佳响应数据格式)。

二十五、描述 ASP.NET 中的应用程序状态管理。

应用程序级别的状态管理用于保持访问网站中所有 Web 表单的所有用户的状态。为应用程序分配的值被视为一个对象。应用程序对象没有默认的有效期。每当 Web 服务器被重新启动或停止时,应用程序对象所维持的信息将会丢失。如果任何数据存储在应用程序对象中,那么该信息将被所有访问 Web 服务器的用户共享。由于信息是在所有用户之间共享的,建议根据需要锁定和解锁应用程序对象。

全局应用程序类(Global.asax)

这是一个类,包含在 Web 服务器上执行相关任务时隐式执行的事件处理程序。

示例代码:

<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
    // 应用程序启动时运行的代码
}
void Application_End(object sender, EventArgs e)
{
    // 应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
    // 发生未处理错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
    // 新会话开始时运行的代码
}
void Session_End(object sender, EventArgs e)
{
    // 会话结束时运行的代码
}
script>

这里的每个事件处理程序将在特定的应用程序生命周期事件发生时被触发。例如,Application_Start 事件会在应用程序启动时被触发,而 Session_End 事件会在会话结束时被触发。

二十六、什么是“内联代码”(Inline Code)背后的代码?

Code Behind(代码隐藏)指的是为 ASP.NET Web 页面编写的代码,这些代码位于单独的类文件中,其扩展名为 .aspx.cs 或 .aspx.vb,具体取决于所使用的语言。在此,代码被编译成一个独立的类,.aspx 文件从中继承。你可以为每个 .aspx 页面编写一个单独的 .cs 或 .vb 代码文件。Code Behind 的一个重要特点是所有 Web 页面的代码都被编译成一个 DLL 文件,这使得 Web 页面可以脱离任何内联服务器代码而被托管。

内联代码

内联代码指的是写在具有 .aspx 扩展名的 ASP.NET Web 页面中的代码。它允许代码与 HTML 源代码一起编写,使用Script标签。其主要优点是由于它物理上位于 .aspx 文件中,因此无论何时部署 Web 页面,它都会随 Web 表单页面一起部署。

二十七、ASP.NET 页面生命周期是什么?

当用户从浏览器请求一个页面时,请求会经过一系列步骤,在后台会发生许多事情以生成输出或向客户端发送响应。请求和响应之间的时期被称为“页面生命周期”。

  • 请求:生命周期的开始(由用户发出)。
  • 响应:生命周期的结束(由服务器发送)。

在 HTML 响应返回给客户端之前,页面生命周期期间会发生四个阶段。稍后我们将研究所有这些阶段及其子事件。

  • 初始化:在此阶段,IsPostBack 属性被设置。页面确定请求是否为回发(旧请求)还是首次处理页面(新请求)。页面上的控件可用,并且每个控件的 UniqueID 属性被设置。如果当前请求是回发,则数据尚未加载,并且控件的值尚未从视图状态恢复。
  • 加载:在此阶段,如果请求是回发,则从视图状态加载数据。
  • 渲染:在渲染之前,页面及其控件的视图状态被保存。在此阶段,页面调用每个控件的 Render 方法,提供一个文本写入器,将输出写入页面的 Response 属性的 OutputStream。
  • 卸载:卸载在页面完全渲染并发送给客户端之后被调用,此时页面准备被丢弃。此时,页面属性如 Response 和 Request 也被卸载。

二十八、ASP.NET 页面生命周期事件有哪些?

在 ASP.NET 页面生命周期中有很多事件,下面列出了一些最重要的事件:

  • 页面请求:当 ASP.NET 收到页面请求时,它决定是解析和编译页面还是存在页面的缓存版本,然后相应地发送响应。
  • 页面生命周期开始:在此阶段,设置 Request 和 Response 对象。如果请求是旧请求或回发请求,则页面的 IsPostBack 属性设置为 true。页面的 UICulture 属性也被设置。
  • 页面初始化:在此阶段,通过设置 UniqueID 属性为页面上的控件分配唯一的 ID,并应用主题。对于新的请求,回发数据被加载,并且控件属性被恢复为视图状态值。
  • 页面加载:在此阶段,使用视图状态和控件状态值设置控件属性。
  • 验证:调用验证控件的 Validate 方法,并且如果验证成功,则页面的 IsValid 属性设置为 true。
  • 回发事件处理:如果请求是回发(旧请求),则调用相关的事件处理程序。
  • 页面渲染:在此阶段,页面和所有控件的视图状态被保存。页面调用每个控件的 Render 方法,并将渲染的输出写入页面 Response 属性的 OutputStream 类。
  • 卸载:渲染后的页面被发送给客户端,并且页面属性如 Response 和 Request 被卸载,完成所有清理工作。

ASP.NET 页面生命周期事件

  • PreInit:PreInit 是页面生命周期的第一个事件。它检查 IsPostBack 属性并确定页面是否是回发。它设置主题和母版页,创建动态控件,并获取和设置配置文件属性值。此事件可以通过覆盖 OnPreInit 方法或创建 Page_PreInit 处理程序来处理。
  • Init:Init 事件初始化控件属性,并构建控件树。此事件可以通过覆盖 OnInit 方法或创建 Page_Init 处理程序来处理。
  • InitComplete:InitComplete 事件允许追踪视图状态。所有控件开启视图状态追踪。
  • LoadViewState:LoadViewState 事件允许将视图状态信息加载到控件中。
  • LoadPostData:在此阶段,处理所有由 
     标签定义的输入字段的内容。
  • PreLoad:发生在回发数据加载到控件之前。此事件可以通过覆盖 OnPreLoad 方法或创建 Page_PreLoad 处理程序来处理。
  • Load:Load 事件首先为页面触发,然后递归地为所有子控件触发。控件树中的控件被创建。此事件可以通过覆盖 OnLoad 方法或创建 Page_Load 处理程序来处理。
  • LoadComplete:加载过程完成,控件事件处理程序运行,并进行页面验证。此事件可以通过覆盖 OnLoadComplete 方法或创建 Page_LoadComplete 处理程序来处理。
  • PreRender:PreRender 事件发生在输出被渲染之前。通过处理此事件,页面和控件可以在输出被渲染之前执行任何更新。
  • PreRenderComplete:由于 PreRender 事件递归地为所有子控件触发,此事件确保预渲染阶段的完成。
  • SaveStateComplete:页面上控件的状态被保存。个性化信息、控件状态和视图状态信息被保存。HTML 标记被生成。此阶段可以通过覆盖 Render 方法或创建 Page_Render 处理程序来处理。
  • UnLoad:UnLoad 阶段是页面生命周期的最后一个阶段。它递归地为所有控件触发 UnLoad 事件,最后为页面本身触发。完成最终清理工作,释放所有资源和引用,如数据库连接。此事件可以通过修改 OnUnLoad 方法或创建 Page_UnLoad 处理程序来处理。

二十九、描述 ASP.NET 中的登录控件。

登录控件(Login Control)提供了用户界面来让用户登录到网站。登录控件使用成员资格服务来验证用户的身份。默认情况下,将自动使用配置文件中指定的成员资格服务,但是您也可以通过控件的属性设置想要使用的成员资格提供程序。登录控件包括以下几个部分:

  • 用户名标签和文本框:收集用于在成员资格系统中标识用户的字符串。
  • 密码标签和文本框:收集指定用户的密码。文本框中的文本始终被遮盖。
  • 登录按钮:提交用户身份验证请求的按钮。
  • 记住我:可配置为显示一个复选框,允许用户选择在其计算机上存储持久性 Cookie。
  • 标题和说明:引导用户完成过程的文本。
  • 链接:可配置的链接,帮助用户找到密码恢复和用户注册信息。
  • 验证器:用户名和密码文本框所需的字段验证器。

示例代码:

<asp:Login ID="Login1" runat="server" BackColor="#FFE0C0" BorderColor="Red">asp:Login>

三十、如何在 ASP.NET 中使用 Repeater 控件?

Repeater 控件是一个数据绑定控件。数据绑定控件是容器控件,它在数据源和表示 UI 之间建立了一个链接以显示数据。Repeater 控件用于显示重复的项目列表。Repeater 控件的主要用途是显示绑定到控件的重复项目列表。与 GridView 或 DataGrid 相比,Repeater 控件在显示数据时更快且更轻量。使用 Repeater 控件,我们可以自定义显示数据的格式。Repeater 控件的主要缺点是它不支持分页和排序。Repeater 控件具有以下几种模板字段:

  • ItemTemplate:用于显示每个项目的项模板。
  • AlternatingItemTemplate:用于显示交替项目的项模板。
  • HeaderTemplate:用于显示列表顶部的标题模板。
  • FooterTemplate:用于显示列表底部的页脚模板。
  • SeparatorTemplate:用于分隔相邻项目的分隔符模板。

在代码隐藏文件中编写连接代码和选择命令如下:

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=MCNDESKTOP34;Initial Catalog=yatendra;Persist Security Info=True;User ID=sa;Password=Password$2");
    SqlDataAdapter sda = new SqlDataAdapter("select * from Student_Details1", con);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    Repeater1.DataSource = dt;
    Repeater1.DataBind();
}

现在在 .aspx 文件中使用 Repeater 控件对象:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div>
            <table>
                <tr>
                    <th>学生 ID:
                        <%# Eval("S_ID") %>
                    th>
                tr>
                <tr>
                    <td>学生姓名td>
                    <td>
                        <%# Eval("Student_Name") %>
                    td>
                tr>
                <tr>
                    <td>注册号td>
                    <td>
                        <%# Eval("Register_No") %>
                    td>
                tr>
                <tr>
                    <td>出生日期td>
                    <td>
                        <%# Eval("D_O_B") %>
                    td>
                tr>
                <tr>
                    <td>考试日期td>
                    <td>
                        <%# Eval("D_O_E") %>
                    td>
                tr>
                <tr>
                    <td>部门td>
                    <td>
                        <%# Eval("Department") %>
                    td>
                tr>
            table>
        div>
    ItemTemplate>
asp:Repeater>

当运行这个页面时,输出将会显示一个表格,其中包含从 Student_Details1 表格中获取的学生详细信息。每一行对应一个学生的记录,并且每个字段(如学生姓名、注册号等)都将显示在表格中的相应位置。

三十一、ASP.NET 中会话维护的不同方法有哪些?

会话是一种状态管理技术。它可以将值存储在服务器上,并且可以支持任何类型的对象,包括我们自定义的对象。会话是最佳的状态管理技术之一,因为它按客户端存储数据,换句话说,为每个用户分别存储数据,并且数据也是安全的,因为它是存储在服务器上的。我们可以根据以下两种配置文件之一设置会话:

  • 机器配置文件 - 应用于所有应用程序。
  • 应用程序配置文件 - 只针对每个应用程序单独应用。

在 ASP.NET 中有四种会话模式:

  • Off - 我们可以使用关闭模式为整个应用程序禁用会话模式。

根据性能和持久性,InProc、State Server 和 SQL Server 的差异如下:

会话模式 性能(处理器和服务器数量) 持久性
InProc 较高(1个处理器和1个服务器) 较低
State Server 中等(n个处理器和1个服务器) 中等
SQL Server 较低 较高

三十二、会话(Session)和缓存(Caching)有什么区别?

会话和缓存之间的主要区别在于:会话是基于用户的,而缓存不是基于用户的。这意味着会话数据是在用户级别存储的,而缓存数据是在应用程序级别存储并且由所有用户共享。也就是说,对于不同的用户,会话数据将是不同的,并且对于所有不同用户,会话内存将在服务器上以不同的方式分配;而对于缓存来说,只会在服务器上分配一块内存,如果一个用户修改了缓存的数据,那么对所有用户来说,该数据都会被修改。

三十三、在 ASP.NET 中 httpsContext.Current.Items 和 httpsContext.Current.Session 有什么区别?

会话状态是 ASP.NET 环境中流行的状态管理技术之一。Web 开发者经常使用会话存储。如果你理解了基本概念,管理会话其实非常简单。以下是设置会话的语法:

Session["KEY"] = "Value";

或者

Session[index] = "Value";

示例代码:

using System;
using System.Web;
//...

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        HttpContext.Current.Items["Value"] = "Sourav Kayal in ITEM";
        HttpContext.Current.Session["Value"] = "Sourav Kayal in SESSION";
        Response.Write((string)(HttpContext.Current.Items["Value"]) + "
"
);
        Response.Write((string)(HttpContext.Current.Session["Value"]));
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Write((string)(HttpContext.Current.Items["Value"]) + "
"
);
    Response.Write((string)(HttpContext.Current.Session["Value"]));
}

这里 HttpContext.Current.Items 是一个字典,用于存储当前 HTTP 请求的数据,这些数据仅在当前请求周期内有效。而 HttpContext.Current.Session 则用于存储会话级别的数据,这些数据在用户会话期间一直可用。

三十四、Server.Transfer 和 Response.Redirect 有什么区别?

Response.Redirect 和 Server.Transfer 方法都用于将用户从一个网页转移到另一个网页。这两种方法的目的相同,但它们之间存在一些差异。Response.Redirect 方法重定向请求到一个新的URL,并指定新的URL;而 Server.Transfer 方法终止当前请求的当前页面执行,并使用指定页面路径的新URL启动新页面的执行。

三十五、 ASP.NET 中的页面指令是什么?

回答:页面指令基本上是编译器在编译页面时使用的命令。在 ASP.NET 页面中添加指令并不复杂,你可以按照以下格式添加指令:

<%@ Directive[Attributes] %>

指令的格式以 <%@ 开始,并以 %> 结束。最好将指令放在页面顶部,但你也可以将指令放在页面的任何位置。此外,你可以在单个指令中放置多个属性。以下是完整的指令列表:

  • @Page
  • @Master
  • @Control
  • @Import
  • @Implements
  • @Register
  • @Assembly
  • @MasterType
  • @OutputCache
  • @PreviousPageType
  • @Reference

这些指令用于控制页面的行为,例如指定页面的语言、编码类型、是否启用会话状态等。

三十六、什么是 HTTPS 处理程序(Handler)?

进入 ASP.NET 应用程序的每一个请求都是由一个专门的组件处理的,这个组件被称为 HTTPS 处理程序。HTTPS 处理程序是处理 ASP.NET 请求时最重要的组成部分。例如,ASP.NET 使用不同的 HTTPS 处理程序来服务于不同类型文件。例如,页面处理程序创建页面和控件对象,运行你的代码,并呈现最终的 HTML。ASP.NET 默认处理程序包括:

  • 页面处理程序(.aspx) - 处理 Web 页面。
  • 用户控件处理程序(.ascx) - 处理 Web 用户控件页面。
  • Web 服务处理程序(.asmx) - 处理 Web 服务页面。
  • 跟踪处理程序(trace.axd) - 处理跟踪功能。

有时我们需要避免 ASP.NET 完整的页面处理模型,这可以节省大量的开销,因为 ASP.NET Web 表单模型需要经过许多步骤,比如创建 Web 页面对象、持久化视图状态等。我们感兴趣的是开发一些低级接口,这些接口提供了对 Request 和 Response 对象的访问,但不使用上述的基于控件的 Web 表单模型。

所有 HTTPS 处理程序都在配置文件的  部分定义,该部分嵌套在  元素中。

三十七、ASP.NET 的 HTTPS 处理程序(Handler)和 HTTPS 模块(Module)之间有什么区别?

HTTPS 处理程序是响应 HTTPS 请求的过程。每当用户请求一个文件时,它就会根据扩展名由处理程序进行处理。因此,当我们需要根据文件名扩展名进行特殊处理时,就会创建自定义 HTTPS 处理程序。例如,为了创建一个站点的 RSS 提要,可以创建一个生成 RSS 格式 XML 的处理程序,并将其绑定到自定义处理程序。

HTTPS 模块则是插入到请求生命周期中的。因此,当请求被处理时,它会通过请求管道中的所有模块。通常,HTTPS 模块用于安全性、统计和日志记录以及自定义头信息的添加。

三十八、解释广告轮播控件(AdRotator Control)

广告轮播控件用于创建动态广告。每次用户进入或刷新网页时,广告轮播控件都会展示广告图片。当广告被点击时,它会导航到一个新的 Web 位置。为了使广告轮播控件工作,我们需要一个广告文件(XML 文件)和一些示例图像。首先,在您的 Web 表单上添加广告轮播 Web 服务器控件。然后映射包含每个广告详情的 XML 文件。

广告文件是一个 XML 文件,其元素包括:

  • :可选。指向图像文件的路径。
  • :可选。如果用户点击广告,则链接到此 URL。
  • :可选。图像的替代文本。
  • :可选。点击率百分比。

三十九、ASP.NET 中的跨页回发(Cross-page Posting)是什么?

ASP.NET 1.1 提供了 Web 表单只能回发给自身的功能。在很多情况下,解决方案要求回发到不同的 Web 页面。传统的解决方法是使用 Response.Redirect 和/或 Server.Transfer 移动到不同的页面并模拟跨页回发行为。ASP.NET 2.0 提供了一种称为跨页回发的功能,允许 Web 表单回发到不同的 Web 表单(而不是自身)。

为了设置 Web 表单回发到不同的 Web 表单,在源 Web 表单中,将实现了 IButtonControl 接口的控件(如 Button、ImageButton、LinkButton)的 PostBackURL 属性设置为目标 Web 表单。当用户点击这个按钮控件时,Web 表单会被跨页回发到目标 Web 表单。

在跨页回发的目标页面中,可以通过 PreviousPage 属性访问源页面的信息。该属性代表源页面,并提供对源 Web 表单及其控件的引用。可以通过 PreviousPage 属性返回的对象上的 FindControl 方法访问源页面上的控件。

四十、解释 ASP.NET 中的 GridView 控件

GridView 控件以表格形式显示数据源的值。每列代表一个字段,而每行代表一条记录。GridView 控件支持以下特性:

  • 绑定到数据源控件,如 SqlDataSource。
  • 内置排序功能。
  • 内置更新和删除功能。
  • 内部分页功能。
  • 内部行选择功能。
  • 通过 GridView 对象模型的编程访问来动态设置属性、处理事件等。
  • 多个主键字段。
  • 超链接列的多个数据字段。
  • 通过主题和样式自定义外观。

创建 GridView 控件的示例代码如下:

<asp:GridView ID="gridService" runat="server">
asp:GridView>

四十一、ASP.NET Web API 与 WCF 有何不同?

ASP.NET Web API 是一个框架,它利用 HTTPS 服务并简化了对客户端请求的响应。Web API 构建了 HTTPS 服务并通过 HTTPS 协议处理请求。请求可能包括 GET、POST、DELETE 或 PUT。可以说 ASP.NET Web API:

  • 是一个 HTTPS 服务。
  • 设计用于覆盖广泛的客户端。
  • 使用 HTTPS 应用程序。
  • 用于创建 RESTful(表述性状态转移)服务。

以下是 ASP.NET Web API 的一些重要点:

  • ASP.NET Web API 支持 MVC 应用程序的特性,如控制器、媒体格式、路由等。
  • 它是一个用于创建 REST 服务的平台。
  • 它是一个用于创建 HTTPS 服务的框架。
  • 响应可以由 API 的 MediaTypeFormatter 格式化为 JavaScript 对象表示法(JSON)和可扩展标记语言(XML)格式。

四十二、ASP.NET 中的 PostBack 属性是什么?

如果我们创建了一个包含一个或多个配置了 AutoPostBack 属性的 Web 控件的网页,ASP.NET 将向渲染的 HTML 页面中添加一个特殊的 JavaScript 函数,名为 _doPostBack()。当调用此函数时,它会触发 PostBack,将数据发送回 Web 服务器。ASP.NET 还会添加两个额外的隐藏输入字段,用于将信息传回服务器。这些信息包括引发事件的控件的 ID 以及任何其他所需的信息。这些字段最初为空,如下所示:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

当用户更改设置了 AutoPostBack 属性为 true 的控件时,将发生以下动作:

  • 在客户端,JavaScript 函数 _doPostBack 被调用,页面被重新提交给服务器。
  • ASP.NET 使用 .aspx 文件重建 Page 对象。
  • ASP.NET 从隐藏的视图状态字段中检索状态信息并相应地更新控件。
  • 触发 Page.Load 事件。
  • 触发相应的更改事件(如果有多个控件被更改,则更改事件的顺序不确定)。
  • 触发 Page.PreRender 事件,并呈现页面(从一组对象转换为 HTML 页面)。
  • 最后,触发 Page.Unload 事件。
  • 新页面被发送到客户端。

四十三、解释 ASP.NET 中的无 Cookie 会话(Cookie-less Session)。

默认情况下,会话使用后台的 cookie。为了启用无 cookie 的会话,我们需要在 Web.Config 文件中更改一些配置。按照以下步骤操作:

  • 打开 Web.Config 文件。
  • 在 标签下添加 标签。
  • 在 标签中添加一个 "cookieless" 属性,并将其值设置为 "AutoDetect" 如下:
<sessionState cookieless="AutoDetect" regenerateExpiredSessionId="true"/>

"cookieless" 属性可能的值包括:

  • AutoDetect:如果启用了 cookie,则会话使用后台 cookie;如果未启用,则使用 URL 存储会话信息。
  • UseCookie:会话始终使用后台 cookie。这是默认设置。
  • UseDeviceProfile:如果浏览器支持 cookie,则会话使用后台 cookie;否则,使用 URL。
  • UseUri:会话始终使用 URL。

"regenerateExpiredSessionId" 用于确保如果 cookieless URL 已过期,则创建带有新会话的新 URL。如果同一 cookieless URL 同时被多个用户使用,则他们都将获得一个新的再生会话 URL。

四十四、ASP.NET 中的主题是什么?

主题决定了网站的外观和感觉。它是一组定义页面外观的文件,可以包括皮肤文件、CSS 文件和图像。我们在一个特别的 App_Themes 文件夹中定义主题。在此文件夹内有一个或多个子文件夹,如 Theme1、Theme2 等,定义实际的主题。主题属性在页面生命周期的后期应用,有效地覆盖了您可能为页面上的个别控件所做的任何自定义。

如何在 ASP.NET 中应用主题?

有三种不同的选项来将主题应用于我们的网站:

  • 在页面级别设置主题:在页面指令中添加 Theme 属性。
  • 在站点级别设置主题:为了设置整个网站的主题,可以在网站的 web.config 文件中设置主题。打开 web.config 文件,找到 元素,并在其上添加主题属性。
  • 在运行时通过编程设置主题:在这里,主题是通过编码在运行时设置的。应在页面生命周期的早期阶段即 Page_PreInit 事件中设置主题。更好的选择是将此应用于站点的基础页面类,因为站点中的每个页面都继承自该类。

四十五、ASP.NET 中的导航技术有哪些?

导航如果没有正确处理,可能会导致数据丢失。我们有许多技术可以从一个页面传递数据到另一个页面,但每种技术都有其自身的重要性和好处。我们将讨论以下几种技术:

  • Response.Redirect:此方法将客户端重定向到新的 URL 地址。
  • Server.Transfer:此方法在服务器端将请求转移到新的页面。
  • Server.Execute:此方法在服务器端执行另一个页面,但不会改变当前页面的 URL。
  • 跨页回发(Cross page posting):这是一种允许页面回发到另一个页面而不是它自己的机制。

四十六、ASP.NET 中的 Web 零件(WebParts)是什么?

ASP.NET 2.0 引入了 Web 零件的概念,我们可以像以前对其他控件那样轻松地编码和探索 Web 零件。我们可以从“Web 零件”组成 Web 零件页面,这些 Web 零件可以是 Web 控件和用户控件。

Web 零件的组件包括:

  • Web 零件管理器(Web Part Manager)
  • Web 零件区域(Web Part Zone)
  • 目录零件(Catalog Part)
  • 目录区域(Catalog Zone)
  • 连接区域(Connections Zone)
  • 编辑零件(Editor Part)
  • 编辑区域(Editor Zone)

Web 零件区域可以包含一个或多个 Web 零件控件。它为其所包含的控件提供了布局。一个单一的 ASPX 页面可以包含一个或多个 Web 零件区域。Web 零件控件可以是工具箱中的任何一个控件,甚至是定制的用户控件。

四十七、什么是母版页(Master Pages)?

关于母版页的一些要点:

  • 母版页的扩展名为 ".master"。
  • 母版页不能直接被客户端访问,因为它只是作为其他内容页的模板。
  • 在母版页中,内容可以位于 ContentPlaceHolder 内或外,只有位于 ContentPlaceHolder 内的内容才能在内容页中自定义。
  • 一个 Web 应用程序中可以有多个母版页。
  • 一个母版页可以拥有另一个作为其母版的母版页。
  • 内容页的内容只能放置在内容标签内。
  • 母版页的控件可以在母版页和内容页中编程,但内容页的控件永远不会在母版页中编程。
  • 一个 Web 应用程序的母版页不能在另一个 Web 应用程序中使用。
  • Web 表单的 MasterPageFile 属性可以动态设置,并且应该在或在 WebForm 的 Page_PreInit 事件之前完成。Page.MasterPageFile = "MasterPage.master"。动态设置的母版页必须具有已在 WebForm 中自定义内容的 ContentPlaceHolder。
  • 事件触发的顺序:Load (Page),Load (Master),LoadComplete (Page)。即,如果想要覆盖母版页 Load 事件处理器中已经完成的工作,那么应该在页面的 LoadComplete 事件中编码。
  • Page_Load 是 Master 的 Load 事件处理程序的方法名称(不是 Master_Load)。

四十八、ASP.NET 中的数据缓存是什么,如何使用它?

回答:数据缓存用于在缓存内存中存储频繁使用的数据。从数据缓存中检索数据比从数据库或其他来源检索数据更有效。我们需要使用 System.Web.Caching 命名空间。数据缓存的作用范围是在应用程序域内,不同于“会话”。

每个用户都能够访问这个对象。当客户端请求服务器时,服务器会在 SQL Server 数据库上执行存储过程或函数或选择语句,然后将响应返回给浏览器。如果我们再次运行它,相同的流程将在 Web 服务器上与 SQL 服务器一起执行。

如何创建数据缓存?

Cache["Employee"] = "DataSet Name";

我们可以使用 Cache 关键字创建数据缓存。它位于 System.Web.Caching 命名空间中。这就像给变量赋值一样简单。

如何移除数据缓存? 我们可以手动移除数据缓存。

Cache.Remove(String key);

四十九、ASP.NET 中的企业库(Enterprise Library)是什么?

企业库是一系列应用程序块和核心基础设施的集合。企业库是一个旨在帮助软件开发者的可重用软件组件。当我们希望构建旨在供创建复杂企业级应用程序的开发者使用的应用程序块时,我们会使用企业库。

企业库应用程序块包括:

  • 安全应用程序块(Security Application Block):提供开发者将安全功能集成到应用程序中的能力。此应用程序可以使用各种块,如针对数据库验证和授权用户。
  • 异常处理应用程序块(Exception Handling Application Block):允许开发者为整个企业应用程序层的一致错误处理创建。
  • 加密应用程序块(Cryptography Application Block):允许开发者向应用程序添加加密和哈希功能。
  • 缓存应用程序块(Caching Application Block):允许开发者在应用程序中集成本地缓存。

五十、我们如何提高 ASP.NET Web 页面的性能?

这是一个面试中最常见的问题之一。在这篇文章中,我将指出一些有助于提高性能的重要点。这里的“提高性能”是指减少页面加载时间。背后的原因有很多,有些可以从“后端”(数据库侧)的角度来看待,其余的则需要从前端(UI 侧)来考虑。假设您有一个 ASP.NET Web 站点,其中一个 aspx 页面加载时间很长。本文将探讨如何减少加载时间。

后端(数据库)

  • 检查查询性能,即查询执行并从数据库中拉取记录所需的时间。使用 SQL Server Profiler 和查询执行计划来确定哪个部分花费了大量时间。
  • 检查每个表(作为查询的一部分)是否正确创建了索引。
  • 如果您的查询涉及复杂的存储过程,其中又包含大量的连接,则应关注每个表。在某些情况下,子查询的表现优于连接。
  • 如果您的 Web 页面涉及分页概念,请尝试将分页逻辑移到 SQL Server。我的意思是根据页数,存储过程将返回记录,而不是整体获取记录。