首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC ModelMetadata 客製化:IMetadataAware 介面與 AllowHtmlAttribute 實戰

     編輯:關於ASP.NET

IMetadataAware 介面讓特性在 ModelMetadata 建立後介入修改,是客製化中繼資料的核心擴展點。MVC 內建兩個實作:AdditionalMetadataAttribute(增加額外值)與 AllowHtmlAttribute(關閉 HTML 請求驗證)。本文詳細解析機制與實戰驗證。

一、IMetadataAware 介面定義

public interface IMetadataAware
{
    void OnMetadataCreated(ModelMetadata metadata);
}

流程:ModelMetadata 建立 → 套用 DataAnnotations 特性初始化 → 篩選實作 IMetadataAware 的特性 → 呼叫 OnMetadataCreated 允許修改最終中繼資料。

二、AllowHtmlAttribute 實作分析

[AttributeUsage(AttributeTargets.Property, AllowMultiple=false, Inherited=true)]
public sealed class AllowHtmlAttribute : Attribute, IMetadataAware
{
    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.RequestValidationEnabled = false;
    }
}

ModelMetadata.RequestValidationEnabled 預設 true,啟用 ASP.NET 請求驗證(攔截含 HTML 標記的輸入)。AllowHtmlAttribute 將其關閉,允許該屬性接收 HTML 內容。

三、實戰驗證

public class Foo
{
    public string Bar { get; set; }
    [AllowHtml] public string Baz { get; set; }
}

public class HomeController : Controller
{
    public ActionResult Index(Foo foo) { return View(foo); }
}

@model Foo
@Html.EditorForModel()

瀏覽 /Home/Index?Bar=<script/>&Baz=<script/>:

  • Bar:無 AllowHtml,請求驗證攔截,拋出 HttpRequestValidationException
  • Baz:有 AllowHtml,正常繫結顯示 <script/> 於文字框

AllowHtmlAttribute 驗證結果

四、應用場景

富文本編輯器(CKEditor、TinyMCE)輸入內容、需儲存 HTML 片段的欄位、信任內部用戶輸入的後台管理介面。謹慎使用,避免 XSS 風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved