配置概述:ASP.NET

分享于 

20分钟阅读

Web开发

  繁體

内容

简介

在本文中,我将探讨网站的配置文件。 ASP.NET 网站配置通常是两个文件的组合:

  • machine.config
  • web.config

在这里,我将重点介绍 web.config,并概述的machine.config。

每次安装. NET 框架时,都会在" C:WINDOWSMicrosoft.NETFramework[Version]CONFIG"中创建一个 machine.config 文件,该文件主要定义:

  • 支持的配置文件部分,
  • ASP.NET 工作进程配置,以及
  • 注册用于高级特性( 如配置文件。成员身份和基于角色的安全性)的不同提供程序。

为了探索这个插件,可能需要一本书,但是这里,我将尝试探索对 ASP.NET 网站及其部署发挥重要作用的所有重要部分。

每个web应用程序都从 machine.config 文件继承设置,应用程序级别设置在 web.config 文件中完成。 我们还可以在 web.config 文件中的machine.config 文件中重写配置。 但是,由于某些设置是进程模型设置,不能在每个应用程序基础上更改一些设置。

配置文件的全部内容,无论是 machine.config 还是 web.config,都嵌套在一个 <configuration> 元素中。

ASP.NET 多层配置系统

ASP.NET 使用多层配置系统,允许对应用程序的不同部分使用不同的设置。 为此,虚拟目录中必须有一个额外的子目录 inside,并且这些子目录将包含它们自己的配置文件。 ASP.NET 使用配置继承,以便每个子目录从父目录中获取设置。

config1.jpg

举个例子吧,我们有一个网站要求。 http://localhost/X/Y/Z/page.aspx,其中是应用程序的root 目录。 在这种情况下,会出现多个级别的设置。

  • 首先应用默认的machine.config 设置。
  • 接下来,应用 root 级别的web.config。 这个 web.config 驻留在与文件相同的配置目录中。
  • 现在,如果应用程序 root 中有任何配置文件,那么这些设置将被应用。
  • 如果子目录中有任何配置文件,则现在将应用这些设置。
  • 如果应用程序 root Z 中有任何配置文件,则将应用这些设置。

但是这里有一个限制: we Having 不受任何限制,因为在第1 级和第 2步配置中的配置比在应用程序 root 级别上的配置更重要,因为要使用的身份验证类型和其他设置都可以重写,如使用的身份验证类型。

当我们对不同的文件夹应用不同的安全设置时,不同的配置文件很有用。 需要保护的文件将放置在单独的文件夹中,单独的web.config 文件定义了这些文件的严格安全设置,相反,这些文件的安全设置相反。

此外,在元素中,还有另一个元素 <system.web>,它用于 ASP.NET 设置,并包含配置的每个方面的独立元素。

重要的配置标记

web服务提供了很多配置标签,比如 authenticationauthorizationbrowserCapsclientTarget 等等,但是所有这些都没有那么重要,这里我只关注配置文件的主要标签。

<身份验证>

这里元素用于在客户端从服务器请求页时验证客户端的身份。 这是在应用程序级别设置的。 我们有四种类型的认证模式: " None"," Windows"," Forms"还有" Passport"。

如果不需要任何身份验证,这就是我们使用的设置:

<authenticationmode="None"/>

通常使用 Windows 身份验证,为此,我们需要检查复选框: 集成的Windows 身份验证。

<authenticationmode="Windows"/>

这里身份验证由IIS处理。 当用户向服务器发送请求时,IIS对它的进行身份验证,并将身份验证标识发送给代码。

config2.jpg

IIS为我们提供了四种身份验证模式选择: 匿名,基本,摘要和 Windows 集成。 如果用户选择匿名,则IIS不执行任何身份验证。 用户必须提供用户名和密码才能进行基本身份验证。 这种身份验证非常不安全,因为用户凭据在网络上以明文格式发送。 摘要身份验证与基本相同,除了将用户的密码哈希并传输到线程上的哈希版本。 所以它比基本的更安全。 对于 Windows 集成身份验证,密码永远不会越过网络。 用户必须拥有用户名和密码,但是应用程序使用Kerberos或者质询/响应协议来验证用户的身份。

基于web应用程序表单的收费表使用web应用程序表单收集用户凭证,在凭证的基础上,对web应用程序进行操作。

<authenticationmode="Forms"><formsname="Form"loginUrl="index.asp"/></authentication>

Microsoft提供了护照认证。 应指定重定向 URL,并且当请求页未被身份验证时使用,然后重定向到这里 URL。

<authenticationmode="Passport"><passportredirectUrl="internal"/></authentication>

在这里,使用微软数据库的Passport中的信息对用户进行身份验证。 好处是,我们可以使用现有的用户凭证( 例如电子邮件地址和密码),而不用强迫用户进行单独的注册过程。 缺点是我们需要与微软通过许可以协议,并根据使用情况付费每年费用。

使用 Passport authentication authentication,你可以在服务器上安装护照软件开发工具包。 这个SDK可以从这里下载到 它包括在你自己的应用程序中实现passport身份验证的完整细节。

<授权>

<authorization> 标记控制对网页资源的客户端访问。 这里元素可以在任何级别的( 计算机。站点。应用程序。子目录或者页面) 中声明。

<authorization><allowusers="comma-separated list of users"roles="comma-separated list of roles"verbs="comma-separated list of verbs"/><denyusers="comma-separated list of users"roles="comma-separated list of roles"verbs="comma-separated list of verbs"/></authorization>

使用这里标记可以控制对资源的访问,我们可以根据以下谓词来控制对资源的访问。 在这些属性中,我们使用符号: *.? 表示匿名用户/资源,* 表示所有用户。

  • users: 包含允许访问资源的用户名( 逗号分隔)的List。
  • roles: 包含允许访问资源的角色( 逗号分隔)的List。
  • verbs: 它包含应用了( 逗号分隔)的HTTP谓词的List。 它用于创建适用于特定类型的HTTP请求( 获取,投递,标头或者调试)的规则。

使用以下标记可以控制对资源的访问:使用这里标记可以控制对资源的访问:

  • users: 包含用户名( 逗号分隔),这些 List 被拒绝访问资源。
  • roles: 包含被拒绝访问资源的角色( 逗号分隔)的List。
  • verbs: 它包含应用了( 逗号分隔)的HTTP谓词的List。 它用于创建适用于特定类型的HTTP请求( 获取,投递,标头或者调试)的规则。

<编译>

在本节中,我们可以配置编译器的设置。 这里有很多属性,但是最常见的是 debugdefaultLanguage。 将 debug 设置为 true 意味着我们希望在浏览器中进行调试信息,但它具有性能折扣,因这里它被设置为 falsedefaultLanguage 告诉 ASP.NET 要使用哪一个语言编译器: VB或者 C#。

<customErrors>

这里标记包含应用程序的错误设置,并用于向最终用户提供自定义错误页( 用户友好错误页)。 在发生错误时,网站被重定向到默认 URL。 为了启用和禁用定制错误,我们需要指定 mode 属性。

<customErrorsdefaultRedirect="url"mode="Off"><errorstatusCode="403"redirect="/accesdenied.html"/><errorstatusCode="404"redirect="/pagenotfound.html"/></customErrors>
  • 如果这里设置有任何错误,则该网站将被重定向到默认的URL。
  • "关闭"表示自定义错误被禁用。
  • "RemoteOnly"显示自定义错误将只显示给远程客户端。
<errorstatusCode="403"redirect="/accesdenied.html"/><errorstatusCode="404"redirect="/pagenotfound.html"/>

如果出现错误,则网站将重定向到自定义页面 accessdenied.html。 类似于上面定义的404.

如果自定义错误页面本身发生错误,则 ASP.NET 将无法处理它。 它不会试图将用户添加到同一页。 相反,它将显示一般的默认客户端错误页面,并带有一般消息页。

<全球化>

当我们希望使用编码或者为应用程序指定区域性时,使用这里节。 这是一个非常庞大的话题,可以用文章本身来解释它。 在这里,我们定义服务器发送响应到客户端的字符集,缺省情况下是 UTF-8,服务器应该使用的设置来解释和显示区域性特定的字符串,比如数字和日期。

<globalizationrequestEncoding="utf-8"responseEncoding="utf-8"/>

<httpRuntime>

这里节可以用于配置应用程序的常规运行时设置。 主要的两个是:

<httpRuntimeappRequestQueueLimit="50"executionTimeout="300"/>

正如 NAME 所建议的,属性 appRequestQueueLimit 定义可以在服务器上排队的请求数,以进行处理。 如果有 51个或者更多请求,那么服务器将返回 503错误("服务器太忙")。

属性 executionTimeout 定义 ASP.NET 在超时前处理请求的分钟数。

<跟踪>

作为 NAME suggestz,它用于跟踪应用程序的执行。 我们有两种追踪级别: 页面级别和应用程序级别。 应用程序级别启用应用程序中每个页的执行跟踪日志。 if pageoutput="true"" 跟踪信息将显示在每个页面的底部。 另外,我们可以在应用程序 根目录 中查看跟踪日志,在 NAME trace.axd 下。

<traceenabled="false"requestLimit="10"pageOutput="false"traceMode="SortByTime"locaOnly="true"/>

将属性 localOnly 设置为 false 不从客户端查看跟踪信息。

若要在页级别启用跟踪,请设置 trace="true""Page 标记( 在页面的顶部) 中。

<标识>

使用这个标记,我们可以控制应用程序的标识。 默认情况下,Impersonation 被禁用。 使用 Impersonation,ASP.NET 应用程序可以与代表它们运行的客户端的标识一起执行。

<identityimpersonate="false"userName="domainusername"password="password"/>

<sessionState>

在本节中,我们将告诉 ASP.NET 在哪里存储会话。 默认情况下,inproc 是指将会话值存储在服务器上。 但是我们有四个选择:

  • " Off"表示应用程序未启用会话。
  • " inproc"表示在服务器上存储会话值。
  • " StateServer"表示会话状态存储在远程服务器中。
  • " SQLServer"表示会话状态存储在 SQL Server 数据库中。 为此,我们需要在 SQL Server 数据库中安装 InstallSQLState.sql 脚本。 当我们使用web场( 部署在多个服务器上的应用程序) 时,它主要使用,但它使性能比" inproc"更慢。

以下是其他设置:

  • " cookieless":当它出现时 true 这意味着使用的会话没有 Cookies。
  • timeout"指定在该期间未访问应用程序时会话将过期的时间。
  • StateServerstateConnectionString"需要在会话模式为时指定。
  • " sqlConnectionString"是 SQL Server 数据库的连接字符串,如果会话模式为 SQLServer
  • " stateNetworkTimeout"属性,当使用 StateServer 模式存储会话状态时,指定在放弃会话之前服务器和状态服务器的秒数。 默认值为 10.
<sessionStatemode="Off"cookieless="true"timeout="100"stateConnectionString="tcpip=server:port"sqlConnectionString="sql connection string"stateNetworkTimeout="number of seconds"/>

<appSettings>

这里部分用于存储自定义应用程序配置,如数据库连接字符串,文件路径 等等 这也可以用于自定义应用程序宽常量,以便在多个页面中存储信息。 它是根据应用程序的要求。

<appSettings><addkey="Emailto"value="me@microsoft.com"/><addkey="cssFile"value="CSS/text.css"/></appSettings>

可以从以下代码访问它:

ConfigurationSettings.AppSettings("Emailto");

从它返回的所有值都是字符串。

自定义配置

我们可能需要一些基于需求的定制配置节。 最简单的方法是创建自己的命名节,并且可以使用现有的NameValueSectionHandler 组件来解析它们。

config14.gif

可以很容易地从下面的代码中读取这里代码:

privatestring ReadCustomSection()
{
 string strKey = "mySectionKey1";
 NameValueCollection nvcmySection = (NameValueCollection)
 ConfigurationSettings.GetConfig("mySection");
 string strValueofKey = nvcmySection[strKey];
 return strValueofKey;
}

有更多使用定制配置节的方法。 检查本文:CustomConfigurationSection

加密配置节

有些时候,我们将一些敏感的数据放在的web.config 文件中,比如连接字符串,用户特定的细节,建议对这些部分。 ASP.NET 支持两种加密技术。

  • RSA
  • DPAPI

操作执行的方式非常简单。 从配置文件检索信息时,ASP.NET 自动解密它并给代码提供纯文本。 同样,如果我们对配置文件进行任何更新,那么它的执行方式是相同的。 我们不能直接更新配置文件。 但是,我们可以用水来更新它。

编程加密技术: 如果要以编程方式进行加密,则需要检索相应 ConfigurationSection.SectionInformation 对象并调用 ProtectSection() 方法。 如果我们想解密一节,那么我们可以调用方法 UnprotectSetion()。 示例代码如下所示:

Configuration myConfig = 
 WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection mySettings = myConfig.GetSection("mySection");if (mySettings.SectionInformation.IsProtected)
{
 mySettings.SectionInformation.UnprotectSection();
}else{
 mySettings.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); ;
}
myConfig.Save();

命令行 实用工具: 对于配置文件,我们还可以使用 命令行 实用工具( 如 aspnet_regiis.exe ) 加密配置文件,这是在中找到的一个CAB文件。 使用这个工具,我们必须为应用程序创建一个虚拟目录。 你可以参考我的文章在 IIS 部署网站,以获得更多信息。

注意:在使用 保护配置文件部分时,需要指定一些 命令行 参数,如:

  • -pe switch 指定要加密的配置节。
  • -app switch 指定我们的web应用程序虚拟路径。
  • -prov switch 指定提供程序名称。

下面是一个位于以下位置的应用程序的命令行 http://localhost/MyApp:

几个重要的要点。

  • 某些设置无法加密,因为它们在 ASP.NET ( 主要由IIS网络服务器) 之外使用,如 <httpruntime>
  • 配置文件区分大小写。
  • web web.config 文件由IIS提供,因此客户端系统无法访问它。 因此,如果用户试图访问它,则anaccess拒绝消息将显示。
  • 在服务器上更改配置文件时,不需要重启web服务器,因为IIS在 web.config 中监视更改,并且为了性能度量,它缓存了它。
  • 微软还提供了一个称为网站管理工具( WAT )的工具,让我们可以使用web界面来配置 web.config的各个部分的配置。 要运行它,请在 Visual Studio 中选择 Website-> ASP.NET 配置。

进一步阅读。


asp  asp-net  overview  
相关文章