ASP.NET Core Web API - 当类的成员是接口列表时,参数绑定无法工作
创始人
2024-09-15 13:00:57
0

在ASP.NET Core Web API中,当类的成员是接口列表时,参数绑定可能会出现问题。这是因为默认的模型绑定器无法处理接口类型。为了解决这个问题,可以使用自定义模型绑定器来处理接口列表类型的参数。

以下是一个解决方法的示例代码:

首先,创建一个自定义的模型绑定器类,实现IModelBinder接口,并在BindModelAsync方法中处理接口列表类型的参数:

using Microsoft.AspNetCore.Mvc.ModelBinding;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public class InterfaceListModelBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext == null)
        {
            throw new ArgumentNullException(nameof(bindingContext));
        }

        var modelName = bindingContext.ModelName;

        // 获取请求中的值
        var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
        if (valueProviderResult == ValueProviderResult.None)
        {
            return Task.CompletedTask;
        }

        var values = valueProviderResult.FirstValue;

        // 解析接口列表类型的参数
        var interfaces = values?.Split(',').Select(typeName => Type.GetType(typeName)).ToList();

        // 设置模型绑定结果
        bindingContext.Result = ModelBindingResult.Success(interfaces);

        return Task.CompletedTask;
    }
}

然后,在控制器中使用[ModelBinder]属性将自定义模型绑定器应用到接口列表类型的参数上:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;

public class MyController : Controller
{
    public IActionResult MyAction([ModelBinder(BinderType = typeof(InterfaceListModelBinder))] List interfaces)
    {
        // 使用接口列表类型的参数
        // ...

        return Ok();
    }
}

在上述代码中,MyAction方法的参数interfaces是一个接口列表类型的参数。通过将[ModelBinder]属性应用到该参数上,并指定自定义模型绑定器InterfaceListModelBinder,可以使参数绑定正常工作。

这样,当调用MyAction方法时,ASP.NET Core Web API将自动使用自定义模型绑定器来处理接口列表类型的参数。

相关内容

热门资讯

德扑ai智能机器人!德扑之星比... 德扑ai智能机器人!德扑之星比赛创建设置,德扑好像真的有挂(详细透视辅助机制教程)德扑ai智能机器人...
德州之星外 挂!德州nzt实战... 德州之星外 挂!德州nzt实战,云扑克德州辅助器免费(详细透视辅助工具黑科技)该软件可以轻松地帮助玩...
德扑之星有猫腻!德扑之星可以看... 德扑之星有猫腻!德扑之星可以看底牌,德扑ai都是真的有挂(详细透视辅助器教程)德扑之星有猫腻!德扑之...
德州之星插件!德州之星app有... 德州之星插件!德州之星app有,云扑克辅助器是真是假(详细透视辅助工具技巧)云扑克辅助器是真是假辅助...
德扑之星有作弊!德扑之星app... 德扑之星有作弊!德扑之星app发牌规律,德扑一贯真的有挂(详细透视辅助软件教程);一、德扑之星有作弊...
智星德州菠萝开挂!德州ai辅助... 智星德州菠萝开挂!德州ai辅助神器,pokermaster外 挂(详细透视辅助插件规律)1、该软件可...
德扑之星猫腻!德扑ai代打会检... 德扑之星猫腻!德扑ai代打会检测到,德扑平台竟然真的有挂(详细透视辅助脚本教程);一、德扑之星猫腻软...
德州ai辅助软件!德州ai辅助... 德州ai辅助软件!德州ai辅助app,智星德州菠萝成牌闯关(详细透视辅助器插件)1、这是跨平台的智星...
德扑之星ai代打!德扑软件决策... 德扑之星ai代打!德扑软件决策,德扑果然真的有挂(详细透视辅助app教程)1、下载好德扑之星ai代打...
德州免费辅助神器app!德州a... 德州免费辅助神器app!德州ai软件可以收费,云扑克外 挂(详细透视辅助软件插件)1、完成云扑克外 ...