精进不休 .NET 4.0 (1) - asp.net 4.0 新特性之web.config的改进

简介:
[索引页]
[源码下载]


精进不休 .NET 4.0 (1) - asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进


作者: webabcd


介绍
asp.net 4.0 的新增功能
  • 简洁的 web.config 文件
  • 控件的新属性 ViewStateMode - 控件的视图状态模式
  • 控件的新属性 ClientIDMode - 生成客户端 ID 的方式
  • 列表控件的新属性 EnablePersistedSelection - 保存选中项的方式
  • 控件的其他一些增强点
    • RenderOuterTable - 指定控件在客户端呈现的时候,是否在外层加 table 标签
    • Menu 控件,在 asp.net 4.0 中将会以 ul li 的方式呈现在客户端
    • RepeatLayout - 布局模式,控件在客户端的 HTML 呈现方式
    • Wizard 和 CreateUserWizard 新增了 LayoutTemplate 模板
    • 原来使用 ListView 必须要有 LayoutTemplate ,在 asp.net 4.0 中可以不再用它了


示例
1、简洁的 web.config,配置信息被移到了 machine.config
Web.config
<?xml version= "1.0"?> 

<!-- 
        清爽的 web.config    
        配置信息一律都放到 machine.config 里了 
--> 

<configuration> 
         
        <system.web> 
                <compilation debug= "true" targetFramework= "4.0" /> 
        </system.web> 
         
</configuration>
 
 
2、ViewStateMode 属性的用法
ViewStateDemo.aspx
<%@ Page Title= "" Language="C# " MasterPageFile="~/Site.Master " AutoEventWireup=" true
        CodeBehind= "ViewStateDemo.aspx.cs"  Inherits= "AspDotNet.ViewStateDemo" %> 

<asp:Content ID= "Content1" ContentPlaceHolderID= "head" runat= "server"
</asp:Content> 
<asp:Content ID= "Content2" ContentPlaceHolderID= "ContentPlaceHolder1" runat= "server"
        <!-- 
                ViewStateMode - 控件的视图状态模式 
                        ViewStateMode.Enabled - 此控件启用 ViewState,并且其子控件中所有 ViewStateMode 为 Inherit 的控件也全部启用 ViewState 
                        ViewStateMode.Disabled - 此控件禁用 ViewState,并且其子控件中所有 ViewStateMode 为 Inherit 的控件也全部奇偶能用 ViewState 
                        ViewStateMode.Inherit - 此控件是否启用 ViewState,由其父控件的 ViewStateMode 的值决定 
        --> 

        <asp:PlaceHolder ID= "PlaceHolder1" runat= "server" ViewStateMode= "Disabled"

                <!--无 ViewState--> 
                <asp:Label ID= "Label1" runat= "server" ViewStateMode= "Disabled" /> 

                <br /> 

                <!--有 ViewState--> 
                <asp:Label ID= "Label2" runat= "server" ViewStateMode= "Enabled" /> 

                <br /> 

                <!--无 ViewState--> 
                <asp:Label ID= "Label3" runat= "server" ViewStateMode= "Inherit" /> 

        </asp:PlaceHolder> 

        <br /> 
        <!--点击“回发”按钮后观察各个 Label 控件是否启用了 ViewState--> 
        <asp:Button ID= "Button1" runat= "server" Text= "回发" /> 
</asp:Content>
 
ViewStateDemo.aspx.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace AspDotNet 

         public partial  class ViewStateDemo : System.Web.UI.Page 
        { 
void Page_Load() void Page_Load(object sender, EventArgs e) 
                { 
                        // 页面第一次加载时,分别给三个 Label 赋值,用于演示是否启用了 ViewState 
                         if (!Page.IsPostBack) 
                        { 
                                Label1.Text =  "Label1"
                                Label2.Text =  "Label2"
                                Label3.Text =  "Label3"
                        } 
                } 
        } 
}
 
 
3、ClientIDMode 属性的用法
ClientID.aspx
<%@ Page Title= "ClientID" Language= "C#" MasterPageFile= "~/Site.Master" AutoEventWireup= "true" 
        CodeBehind= "ClientID.aspx.cs"  Inherits= "AspDotNet.ClientID" ClientIDMode= "Static" %> 

<asp:Content ID= "Content1" ContentPlaceHolderID= "head" runat= "server"
</asp:Content> 
<asp:Content ID= "Content2" ContentPlaceHolderID= "ContentPlaceHolder1" runat= "server"
         
        <!-- 
                ClientIDMode - 生成客户端 ID 的方式 
                        ClientIDMode.AutoID - 生成方式和以前一样,为保证唯一,会把其以上各层级的控件ID拿过来拼成一个页面中的唯一ID 
                        ClientIDMode.Inherit - 继承父控件的客户端ID生成方式 
                        ClientIDMode.Static - 静态方式。在服务端设置的ID是什么,客户端所呈现的ID就是什么 
                        ClientIDMode.Predictable - 生成ID的方式为:[Prefix]_[ID]_[Suffix] 
                注意: 
                        在某控件层级中如果没有设置 ClientIDMode,则其默认值为 AutoID 
                        如果在控件层级中的父级控件设置了 ClientIDMode,则其子控件的默认值为 Inherit 
        --> 

        <!-- ClientIDMode.AutoID 的 Demo --> 
        <fieldset> 
                <legend>Legacy</legend> 
                <asp:TextBox ID= "txtLegacy" ClientIDMode= "AutoID" runat= "server" Text= "ID: txtLegacy" /> 
        </fieldset> 

        <!-- ClientIDMode.Static 的 Demo --> 
        <fieldset> 
                <legend>Static</legend> 
                <asp:TextBox ID= "txtStatic" ClientIDMode= "Static" runat= "server" Text= "ID: txtStatic" /> 
        </fieldset> 

        <!-- ClientIDMode.Inherit 的 Demo (注意:Page 上的 ClientIDMode 的值为 Static,所以此控件的客户端ID生成方式也是 Static)--> 
        <fieldset> 
                <legend>Inherit</legend> 
                <asp:TextBox ID= "txtInherit" ClientIDMode= "Inherit" runat= "server" Text= "ID: txtInherit" /> 
        </fieldset> 

        <!-- Predictable 模式中自动分配 Suffix 的方式 --> 
        <fieldset> 
                <legend>Predictable Repeater </legend> 
                <div id= "repeaterContainer"
                        <asp:Repeater ID= "repeater" runat= "server" ClientIDMode= "Static"
                                <ItemTemplate> 
                                        <div> 
                                                <asp:Label ID= "productPrice" ClientIDMode= "Predictable" runat= "server"
                                                <%#  string.Format(System.Globalization.CultureInfo.CurrentUICulture,  "{0:c}", Eval( "ProductPrice"))%> 
                                                </asp:Label> 
                                        </div> 
                                </ItemTemplate> 
                        </asp:Repeater> 
                </div> 
                <asp:TextBox ID= "txtPredictableRepeater" runat= "server" TextMode= "MultiLine" Rows= "10" 
                        ClientIDMode= "Static" Style= "width: 99%;" /> 
        </fieldset> 

        <!-- Predictable 模式中分配指定 Suffix 的方式(ClientIDRowSuffix 指定 Suffix 的数据来源) --> 
        <fieldset> 
                <legend>Predictable ListView </legend> 
                <asp:ListView ID= "listView" runat= "server" ClientIDMode= "Static" ClientIDRowSuffix= "ProductId"
                        <ItemTemplate> 
                                <div> 
                                        <asp:Label ID= "productPrice" ClientIDMode= "Predictable" runat= "server"
                                                <%#  string.Format(System.Globalization.CultureInfo.CurrentUICulture,  "{0:c}", Eval( "ProductPrice"))%> 
                                        </asp:Label> 
                                </div> 
                        </ItemTemplate> 
                        <LayoutTemplate> 
                                <div id= "listViewContainer"
                                        <div id= "itemPlaceholder" runat= "server" /> 
                                </div> 
                        </LayoutTemplate> 
                </asp:ListView> 
                <asp:TextBox ID= "txtPredictableListView" runat= "server" TextMode= "MultiLine" Rows= "10" 
                        ClientIDMode= "Static" Style= "width: 99%;" /> 
        </fieldset> 

        <script type= "text/javascript"

() () { 
                        document.getElementById( '<%= txtLegacy.ClientID %>').value += "     ClientID: " + '<%= txtLegacy.ClientID %>'; 

                        document.getElementById( '<%= txtStatic.ClientID %>').value += "     ClientID: " + '<%= txtStatic.ClientID %>'; 

                        document.getElementById( '<%= txtInherit.ClientID %>').value += "     ClientID: " + '<%= txtInherit.ClientID %>'; 

                        document.getElementById( 'txtPredictableRepeater').value = document.getElementById('repeaterContainer').innerHTML; 

                        document.getElementById( 'txtPredictableListView').value = document.getElementById('listViewContainer').innerHTML; 
                } 

        </script> 
</asp:Content>
 
ClientID.aspx.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace AspDotNet 

         public partial  class ClientID : System.Web.UI.Page 
        { 
void Page_Load() void Page_Load(object sender, EventArgs e) 
                { 
                        BindData(); 
                } 

                // 绑定数据到 ListView 
void BindData() void BindData() 
                { 
                        Random random =  new Random(); 

                        List<Product> products =  new List<Product>(); 
                         for (int i = 0; i < 5; i++) 
                        { 
                                products.Add( new Product { ProductId = i + 100, ProductName =  "名称", ProductPrice = random.NextDouble() }); 
                        } 

                        listView.DataSource = products; 
                        listView.DataBind(); 

                        repeater.DataSource = products; 
                        repeater.DataBind(); 
                } 

                 class Product 
                { 
                         public int ProductId {  getset; } 
                         public  string ProductName {  getset; } 
                         public double ProductPrice {  getset; } 
                } 
        } 
}
 
 
4、EnablePersistedSelection 属性的用法
EnablePersistedSelection.aspx
<%@ Page Title= "" Language="C# " MasterPageFile="~/Site.Master " AutoEventWireup=" true
        CodeBehind= "EnablePersistedSelection.aspx.cs"  Inherits= "AspDotNet.EnablePersistedSelection" %> 

<asp:Content ID= "Content1" ContentPlaceHolderID= "head" runat= "server"
</asp:Content> 
<asp:Content ID= "Content2" ContentPlaceHolderID= "ContentPlaceHolder1" runat= "server"
        <!-- 
                EnablePersistedSelection - 保存选中项的方式 
                         true - 根据 DataKeyNames 指定的字段做为关键字保存选中项(分页操作不会改变选中项) 
                         false - 根据行在当前页的表中的索引做为关键字保存选中项(分页后,选中项会发生改变。比如,在第一页选中了第一行,那么分页到第二页的时候选此页的第一行就会被当成选中项,也就是选中项发生了改变) 
        --> 

        <asp:GridView ID= "gridView" runat= "server" AllowPaging= "True" DataSourceID= "ObjectDataSource1" 
                CellPadding= "4" ForeColor= "#333333" GridLines= "None" EnablePersistedSelection= "true" 
                DataKeyNames= "productId"
                <AlternatingRowStyle BackColor= "White" /> 
                <Columns> 
                        <asp:CommandField ShowSelectButton= "True" /> 
                        <asp:BoundField DataField= "productId" HeaderText= "productId" SortExpression= "productId" /> 
                        <asp:BoundField DataField= "productName" HeaderText= "productName" SortExpression= "productName" /> 
                        <asp:BoundField DataField= "productPrice" HeaderText= "productPrice" SortExpression= "productPrice" /> 
                </Columns> 
                <FooterStyle BackColor= "#990000" Font-Bold= "True" ForeColor= "White" /> 
                <HeaderStyle BackColor= "#990000" Font-Bold= "True" ForeColor= "White" /> 
                <PagerStyle BackColor= "#FFCC66" ForeColor= "#333333" HorizontalAlign= "Center" /> 
                <RowStyle BackColor= "#FFFBD6" ForeColor= "#333333" /> 
                <SelectedRowStyle BackColor= "#FFCC66" Font-Bold= "True" ForeColor= "Navy" /> 
                <SortedAscendingCellStyle BackColor= "#FDF5AC" /> 
                <SortedAscendingHeaderStyle BackColor= "#4D0000" /> 
                <SortedDescendingCellStyle BackColor= "#FCF6C0" /> 
                <SortedDescendingHeaderStyle BackColor= "#820000" /> 
        </asp:GridView> 
        <asp:ObjectDataSource ID= "ObjectDataSource1" runat= "server" SelectMethod= "GetData" 
                TypeName= "AspDotNet.EnablePersistedSelection"></asp:ObjectDataSource> 

</asp:Content>
 
EnablePersistedSelection.aspx.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace AspDotNet 

         public partial  class EnablePersistedSelection : System.Web.UI.Page 
        { 
void Page_Load() void Page_Load(object sender, EventArgs e) 
                { 
                         
                } 

                // 为 GridView 提供数据 
List<Product> GetData() List<Product> GetData() 
                { 
                        Random random =  new Random(); 

                        List<Product> products =  new List<Product>(); 
                         for (int i = 0; i < 100; i++) 
                        { 
                                products.Add( new Product { ProductId = i + 1, ProductName =  "名称", ProductPrice = random.NextDouble() }); 
                        } 

                        return products; 
                } 
        } 

        // 为 GridView 提供数据的实体类 
         public  class Product 
        { 
                 public int ProductId {  getset; } 
                 public  string ProductName {  getset; } 
                 public double ProductPrice {  getset; } 
        } 
}
 
 
5、控件的其他一些增强点
ControlsEnhancement.aspx
<%@ Page Title= "" Language="C# " MasterPageFile="~/Site.Master " AutoEventWireup=" true
        CodeBehind= "ControlsEnhancement.aspx.cs"  Inherits= "AspDotNet.ControlsEnhancement" %> 

<asp:Content ID= "Content1" ContentPlaceHolderID= "head" runat= "server"
</asp:Content> 
<asp:Content ID= "Content2" ContentPlaceHolderID= "ContentPlaceHolder1" runat= "server"

        <!-- 
                RenderOuterTable - 指定控件在客户端呈现的时候,是否在外层加 table 标签 
                        FormView,Login,PasswordRecovery,ChangePassword 控件均有此属性    
        --> 
        <asp:FormView ID= "FormView1" runat= "server" DefaultMode= "Insert" RenderOuterTable= "false"
                <InsertItemTemplate> 
                        FormView 的插入模板 
                </InsertItemTemplate> 
        </asp:FormView> 

        <br /><br /> 

        <!-- 
                Menu 控件,在 asp.net 4.0 中将会以 ul li 的方式呈现在客户端 
        --> 
        <asp:Menu ID= "Menu1" runat= "server"
                <Items> 
                        <asp:MenuItem Text= "Level 1 - Item 1" Value= "1"
                                <asp:MenuItem Text= "New Item" Value= "3"></asp:MenuItem> 
                        </asp:MenuItem> 
                        <asp:MenuItem Text= "Level 1 - Item 2" Value= "2"
                                <asp:MenuItem Text= "Level 2 - Item 1" Value= "4"></asp:MenuItem> 
                                <asp:MenuItem Text= "Level 2 - Item 2" Value= "5"></asp:MenuItem> 
                        </asp:MenuItem> 
                </Items> 
        </asp:Menu> 

        <br /><br /> 

        <!-- 
                RepeatLayout - 布局模式,控件在客户端的 HTML 呈现方式 
                        RepeatLayout.Flow - 流式布局,一行一个选项 
                        RepeatLayout.OrderedList - ol li 布局 
                        RepeatLayout.UnorderedList - ul li 布局 
                        RepeatLayout.Table - Table 布局 
                        CheckBoxList,RadioButton 控件均有此属性 
        --> 
        <asp:CheckBoxList ID= "CheckBoxList1" runat= "server" RepeatLayout= "UnorderedList"
                <asp:ListItem Text= "Item1" /> 
                <asp:ListItem Text= "Item2" /> 
                <asp:ListItem Text= "Item3" /> 
                <asp:ListItem Text= "Item4" /> 
                <asp:ListItem Text= "Item5" /> 
                <asp:ListItem Text= "Item6" /> 
        </asp:CheckBoxList> 

        <br /><br /> 

        <!-- 
                Wizard 和 CreateUserWizard 新增了 LayoutTemplate 模板 ,如下 
                        headerPlaceholder - runtime时,其内容会被 HeaderTemplate 中的内容替换掉 
                        sideBarPlaceholder - runtime时,其内容会被 SideBarTemplate 中的内容替换掉 
                        wizardStepPlaceholder - runtime时,其内容会被 WizardStepTemplate 中的内容替换掉 
                        navigationPlaceholder - runtime时,其内容会被导航模板中的内容替换掉 
        --> 
        <asp:Wizard ID= "Wizard1" runat= "server"
                <LayoutTemplate> 
                        <div style= "background-color: Yellow"
                                <asp:PlaceHolder ID= "headerPlaceholder" runat= "server" /> 
                        </div> 
                        <asp:PlaceHolder ID= "sideBarPlaceholder" runat= "server" /> 
                        <asp:PlaceHolder ID= "wizardStepPlaceholder" runat= "server" /> 
                        <div style= "background-color: Red"
                                <asp:PlaceHolder ID= "navigationPlaceholder" runat= "server" /> 
                        </div> 
                </LayoutTemplate> 
                <HeaderTemplate> 
                        Header 
                </HeaderTemplate> 
                <WizardSteps> 
                        <asp:WizardStep runat= "server" Title= "Step 1"
                        </asp:WizardStep> 
                        <asp:WizardStep runat= "server" Title= "Step 2"
                        </asp:WizardStep> 
                </WizardSteps> 
        </asp:Wizard> 

        <br /><br /> 

        <!-- 
                原来使用 ListView 必须要有 LayoutTemplate ,在 asp.net 4.0 中可以不再用它了 
        --> 
        <asp:ListView ID= "listView" runat= "server" ClientIDRowSuffix= "ProductId"
                <ItemTemplate> 
                        <div style= "background-color: Fuchsia"
                                <%#  string.Format(System.Globalization.CultureInfo.CurrentUICulture,  "{0:c}", Eval( "ProductPrice"))%> 
                        </div> 
                </ItemTemplate> 
                <%-- 
                <LayoutTemplate> 
                        <div style= "background-color: Fuchsia"
                                <div id= "itemPlaceholder" runat= "server" /> 
                        </div> 
                </LayoutTemplate> 
                --%> 
        </asp:ListView> 

</asp:Content>
 
ControlsEnhancement.aspx.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace AspDotNet 

         public partial  class ControlsEnhancement : System.Web.UI.Page 
        {    
void Page_Load() void Page_Load(object sender, EventArgs e) 
                { 
                        BindData(); 
                } 

                // 绑定数据到 ListView 
void BindData() void BindData() 
                { 
                        Random random =  new Random(); 

                        List<Product> products =  new List<Product>(); 
                         for (int i = 0; i < 5; i++) 
                        { 
                                products.Add( new Product { ProductId = i + 1, ProductName =  "名称", ProductPrice = random.NextDouble() }); 
                        } 

                        listView.DataSource = products; 
                        listView.DataBind(); 
                } 

                 class Product 
                { 
                         public int ProductId {  getset; } 
                         public  string ProductName {  getset; } 
                         public double ProductPrice {  getset; } 
                } 
        } 
}
 
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/341048 ,如需转载请自行联系原作者

相关文章
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
3月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
68 4
|
3月前
|
SQL 安全 PHP
PHP 自发布以来一直在 Web 开发领域占据重要地位,PHP 8 更是带来了属性、刚性类型等新特性。
【10月更文挑战第1天】PHP 自问世以来,凭借其易用性和灵活性,在 Web 开发领域迅速崛起。从简单的网页脚本语言逐步演进为支持面向对象编程的现代语言,尤其自 PHP 5.3 引入命名空间后,代码组织和维护变得更加高效。PHP 7 的性能优化和 PHP 8 的新特性(如属性和刚性类型)进一步巩固了其地位。框架如 Laravel、Symfony、Yii2 和 CodeIgniter 等简化了开发流程,提高了效率和安全性。
71 2
|
1月前
|
开发框架 .NET PHP
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。
|
2月前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
114 7
|
2月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
47 4
|
3月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
52 1
|
3月前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
【10月更文挑战第5天】随着PHP 8的发布,这门历史悠久的脚本语言重获新生。PHP 8引入了联合类型、命名参数、属性、空安全运算符及JIT编译器等一系列新特性,不仅提升了开发者的编程体验,还增强了PHP在现代Web开发领域的竞争力。本文将详细介绍这些新特性及其对Web开发的影响。例如,联合类型允许函数参数接受多种类型,提高代码灵活性;命名参数则使函数调用更加直观易懂;属性可用于装饰类、方法等,提供额外信息;空安全运算符避免了访问未定义属性时的错误;JIT编译器则显著提升了性能。这些改进共同提升了代码质量和开发效率,巩固了PHP在Web开发中的地位。
31 4
|
3月前
|
存储 编译器
.Net特性Attribute的高级使用
【10月更文挑战第14天】在.NET中,特性(Attribute)是一种强大的机制,用于在代码中添加元数据。本文介绍了特性的高级用法,包括自定义特性、通过反射读取特性、条件编译与特性结合、多个特性应用以及特性继承。通过示例展示了如何创建自定义特性类、应用自定义特性,并通过反射获取特性信息。此外,还介绍了如何利用条件编译符号实现不同版本的代码控制,以及如何在一个代码元素上应用多个特性。最后,探讨了如何通过`AttributeUsage`控制特性的继承行为。
|
4月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。