一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 【asp.net core】自定義模型綁定及其驗證

【asp.net core】自定義模型綁定及其驗證

2023-05-10 00:01未知服務器之家 ASP.NET教程

引言 水此篇博客,依舊是來自群里的討論,最后說到了,在方法參數自定義了一個特性,用來綁定模型,優先從Form取,如果為空,或者不存在,在從QueryString中獲取并且綁定,然后閑著無聊,就水一篇博客,如果大家有什么需求或

引言

    水此篇博客,依舊是來自群里的討論,最后說到了,在方法參數自定義了一個特性,用來綁定模型,優先從Form取,如果為空,或者不存在,在從QueryString中獲取并且綁定,然后閑著無聊,就水一篇博客,如果大家有什么需求或者問題,可以找我,很高興能為你們帶來幫助。

IModelBinderFactory

    總共也沒有多少代碼,關鍵其實也就是在于三個接口而已。第一個接口就是模型綁定工廠接口,繼承這個接口,然后實現創建IModelBinder接口的實例即可,當然可以看到我們需要實現IModelBinder接口,在這個接口中,我們就new一個TestBinder就行了,只實現效果,不涉及業務,然后在綁定的時候會調用到BindModelAsync方法,然后在此處你可以實現自定義模型綁定,可以結合Required或者Email,MaxLength特性,結合HttpCotnext實現自己的一個模型綁定。

public class TestBinderFactory : IModelBinderFactory
{

    public IModelBinder CreateBinder(ModelBinderFactoryContext context)
    {
        return new TestBinder();
    }
}
public class TestBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        bindingContext.Model = new TestModel() { };
       bindingContext.Result = ModelBindingResult.Success(bindingContext.Model);
        return Task.CompletedTask;
    }
}

IObjectModelValidator

    在模型綁定之后,還需要實現自定義的一個驗證,在默認情況下,如果使用自己去驗證,且你綁定好的模型里有屬性為null,則會提示the propertyname is required,就是這個屬性是必須的,就需要在此處實現一個自定義驗證,讓通過驗證,如果有需要你還需要實現IValidationStrategy接口,用來對模型內部的各個子項屬性進行驗證,當然如果不需要驗證的話可以直接走默認的,即實現了這個接口,但不寫Validate的方法體,空方法就行,如果需要就自己實現就行了,同時將自己實現的接口注入到容器,替換掉自帶的就可以實現自定義模型綁定和驗證了。

public class Validator : IObjectModelValidator
{
    public Validator(IModelMetadataProvider modelMetadataProvider)
    {
        ModelMetadataProvider = modelMetadataProvider;
    }

    public IModelMetadataProvider ModelMetadataProvider { get; }

    public void Validate(ActionContext actionContext, ValidationStateDictionary? validationState, string prefix, object? model)
    {
        //var data=ModelMetadataProvider.GetMetadataForType(model.GetType());
        //var entry=new  Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationStateEntry();
        //entry.Key = "Name";
        //entry.Metadata = data;
        //validationState.Add("Name", entry);
    }
}
builder.Services.AddSingleton<IObjectModelValidator, Validator>();
builder.Services.AddSingleton<IModelBinderFactory, TestBinderFactory>();

結尾

    本博客僅提供思路以及部分接口實現,不涉及任何業務,如果在asp.net core中需要自定義實現什么,此處提供幾個思路,

    1:去api瀏覽器,找到對應的相關接口,傳送門。

    2:然后在啟動的時候,在service全部注入之后,打斷點,找到和你要實現自定義相關的接口或者實例即可。

    3:根據第二步找到的相關注入類型,在api瀏覽器找到對應的,實現這個接口然后注入進去即可,源碼中所有的都是tryadd,所以不用擔心沖突,存在多種實現的也都是集合類型的。

    4:接下來就是調試運行,就行了。

    當然有能力者,可以直接去閱讀源碼實現即可,思路往往比具體的實現更重要。近期會在此處講解asp.net core啟動流程及其源碼,有興趣的話,可以進群。

【asp.net core】自定義模型綁定及其驗證

?

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热这里只有精品免费 | 久青草国产在线观看视频 | 日本卡一卡2卡3卡4精品卡无人区 | 护士被多人调教到失禁h | 国产精品福利短视在线播放频 | 四虎论坛| 秋霞717理论片在线观看 | 星空无限传媒xk8129 | 歪歪私人影院成人毛片 | 99久久精品免费看国产一区二区 | 亚洲高清视频在线观看 | 日本免费的一级绿象 | 国产成人永久免费视 | 亚洲精品成人 | 午夜久久免影院欧洲 | 日产欧产va高清 | 被老头肉至怀孕小说 | 亚洲阿v天堂2018在线观看 | 成人aqq| 99精品国产成人一区二区 | 午夜精品久久久内射近拍高清 | 日韩天堂在线 | 成 人 免费 小说在线观看 | 女人是男人的未来1分49分 | 色综合天天综合 | 男女一级特黄a大片 | 国产午夜精品一区二区 | 男人搡女人视频免费看 | 久久视频在线视频观看精品15 | 精品亚洲国产一区二区 | 超时空要爱国语完整版在线 | 婚前试爱全集免费观看 | 午夜AV亚洲一码二中文字幕青青 | 99国产小视频 | 国产91成人精品亚洲精品 | 欧美一区二区三区精品国产 | 国产综合亚洲欧美日韩一区二区 | 韩国最新三级网站在线播放 | 精品无人区乱码1区2区3区在线 | acg火影忍者熟密姬纲手h | 91视频www|