激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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教程

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

引言

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

IModelBinderFactory

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

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

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

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>();

結尾

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

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

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

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

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

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

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

?

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 看免费黄色大片 | 蜜桃一本色道久久综合亚洲精品冫 | 羞羞的视频在线观看 | 99视频在线观看视频 | 91久久线看在观草草青青 | 91久久久久久 | 九九精品视频观看 | 91久久久久久久久久久久久 | 91看片在线看 | 天天夜干 | 激情视频免费观看 | 老a影视网站在线观看免费 欧美日韩成人一区二区 | 国产精品久久久久久久久久东京 | 福利在线国产 | 日韩精品一区二区亚洲 | 欧美成人视 | www.99热精品 | 久久久久北条麻妃免费看 | 男人久久天堂 | 黄色网址电影 | 亚洲成人免费电影 | 他也色在线视频 | 欧美成人综合视频 | 综合网天天射 | 91精品成人福利在线播放 | 视屏一区 | 欧美激情天堂 | 日本成人高清视频 | 天天透天天狠天天爱综合97 | 高清国产午夜精品久久久久久 | 欧美一级毛片美99毛片 | freexxxhd喷水 | 竹内纱里奈55在线观看 | 亚洲性视频 | 欧美一级做一级爱a做片性 91在线视频观看 | 91九色精品 | 久久久久免费电影 | 蜜桃av网| 看片一区二区三区 | 玖草 | 婷婷精品国产一区二区三区日韩 |