gpt4 book ai didi

asp.net-mvc - MVC 可选体参数

转载 作者:行者123 更新时间:2023-12-04 13:43:39 25 4
gpt4 key购买 nike

我正在尝试从 3rd 方系统连接 webhook。

创建订阅时,它会访问我提供的 URL,并需要返回一个经过验证的 token 来创建 Hook 。

当事件被触发时,钩子(Hook)发布到我在正文中提供的数据的同一个 URL。

如何获得 Core 2.1 MVC Controller /路由以将它们视为 Controller 上的两种不同方法或复杂对象是可选的方法签名?

两种 POST 方法(这会产生歧义异常)

public async Task<IActionResult> Index(){}
public async Task<IActionResult> Index([FromBody] ComplexObject co){}

或 complexObject 是可选的(如果不是,它会抛出一个 Executing ObjectResult,在订阅创建步骤中写入类型为“Microsoft.AspNetCore.Mvc.SerializableError”的值。)
public async Task<IActionResult> Index([FromBody] ComplexObject co){}

最佳答案

另一种解决方法:

public class AllowBindToNullAttribute : ModelBinderAttribute
{
public AllowBindToNullAttribute()
: base(typeof(AllowBindToNullBinder))
{

}

public class AllowBindToNullBinder : IModelBinder
{
public async Task BindModelAsync(ModelBindingContext bindingContext)
{
var stream = bindingContext.HttpContext.Request.Body;
string body;
using (var reader = new StreamReader(stream))
{
body = await reader.ReadToEndAsync();
}

var instance = JsonConvert.DeserializeObject(body, bindingContext.ModelType);
bindingContext.Result = ModelBindingResult.Success(instance);
}
}
}
你会像这样使用它:
public async Task<IActionResult> Index(
[FromBody] [AllowBindToNull] ComplexObject co = null){}

关于asp.net-mvc - MVC 可选体参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52863469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com