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

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

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】自定義模型綁定及其驗證

?

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美人妖另类性hd | 国产成人一区二区三区 | 成人免费观看一区二区 | 亚洲乱码一二三四区国产 | 521色香蕉网站在线观看 | 免费在线观看视频 | 久久成人伊人欧洲精品AV | 国产一级片免费观看 | 美女扒开腿让男人桶爽动态图片 | 国产v日韩v欧美v精品专区 | 久久久精品国产免费A片胖妇女 | 亚洲男gay同性同志 亚洲免费在线看 | 精品久久久久久亚洲精品 | 久久不射视频 | 我半夜摸妺妺的奶C了她软件 | 日本高清在线观看天码888 | 国产嫩草视频 | 四虎影剧院| 午夜亚洲一区二区福利 | 男女肉文高h | 国产精品自在线拍 | 国产在线精品一区二区高清不卡 | 国产在线成人精品 | 四虎国产精品免费久久麻豆 | 亚洲精品久久玖玖玖玖 | 国产suv精品一区二区四区三区 | 国产第一福利影院 | 国产精品女主播大秀在线 | 日本在线播放视频 | 别停好爽好深好大好舒服视频 | 亚洲香蕉视频 | 国产精品99在线观看 | 美女国内精品自产拍在线播放 | 亚洲狠狠网站色噜噜 | 亚洲六月丁香六月婷婷蜜芽 | 亚裔maricahaseaⅴ | 国产青色 | 精品一区二区91 | 51精品| 美女被的在线网站91 | 动漫美女羞羞 |