我正在尝试从第三方系统连接一个Webhook。
创建订阅时,它会到达我提供的URL,并且需要返回经过验证的令牌才能创建钩子。
触发事件时,钩子将发布到与正文中提供的数据相同的URL。
如何获取Core 2.1 MVC控制器/路由,以将其视为控制器上的两个不同方法或复杂对象为可选的方法签名?
两种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){}
答案 0 :(得分:0)
我使用了空参数方法签名并检查了正文是否有数据。不理想。
答案 1 :(得分:0)
另一种解决方法:
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){}