簡體   English   中英

在.NET Core中調用自定義ModelBinder

[英]Call custom ModelBinder in .NET Core

我正在.NET Core 1.1.0中創建一個自定義ModelBinder,我想我基本上已經知道了。 我只想在需要時才使用此資料夾,但是我不知道該如何完成。 我不希望調用此模型綁定程序時將其忽略,但是當我調用它時,我希望所有其他綁定程序都被忽略。 我該怎么做?

似乎可行的兩件事是參數屬性[Bind][ModelBinder] ,但它們都[ModelBinder]

我首先嘗試了以下方法:

[HttpGet]
public async Task<IActionResult> Get([Bind("test")] int userId)
{
    // stuff
}

當點擊我的自定義IModelBinderProviderModelBinderProviderContext包含BindingInfo屬性,該屬性又包含IPropertyFilterProvider 調試時,該篩選器提供程序包含一個名為Include的集合,其中Include我的test值。 但是,似乎沒有任何方法可以通過編程方式檢查該集合,但是我找不到實際訪問該集合的方法。 如果未設置任何內容,則為null,因此我可以假設檢查是否為null,但這很混亂,也不是一個好主意。

為了說明這一點,這是ModelBinderProviderContext的調試器信息:

調試器輸出

接下來,我嘗試使用此代碼:

[HttpGet]
public async Task<IActionResult> Get(
    [ModelBinder(BinderType = typeof(MyModelBinder))] int userId
)
{
    // stuff
}

此屬性似乎沒有任何作用。 它不會強制使用MyModelBinder 模型聯編程序按照Startup.csMvcOptions的列表)中指定的順序使用。

PropertyFilterProvider包含一個實現IPropertyFilterProvider接口的BindAttribute實例。 您可以將實例轉換為BindAttribute並訪問Include屬性:

var bindAttribute = context.BindingInfo.PropertyFilterProvider as BindAttribute;
var include = bindAttribute?.Include;

請記住, bindingAttribute可能不會成功,導致bindingAttributenull

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM