如何在 ASP.NET 中接收 Twilio Video 的视频通话事件
How to receive video call events in ASP.NET for Twilio Video
我正在为使用 Twilio 的视频通话的状态回调创建一个 webhook。问题是我想过滤发生的事件,以便我可以使用该信息做一些其他事情。创建视频通话时如何接收这些事件?
在 ASP.NET Core 中,您可以使用 MVC 或 Minimal APIs(端点)处理 webhook。
MVC 控制器能够将表单参数绑定到 strongly-typed object 参数(也称为模型绑定)或简单参数。
这是一个控制器,它将表单参数绑定到 RoomStatusRequest
的实例,然后记录它的一些属性:
using Microsoft.AspNetCore.Mvc;
using RoomStatusCallback.Models;
namespace RoomStatusCallback.Controllers;
public class RoomController : Controller
{
private readonly ILogger<RoomController> logger;
public RoomController(ILogger<RoomController> logger)
{
this.logger = logger;
}
public ActionResult Status(RoomStatusRequest statusRequest)
{
logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
statusRequest.RoomName,
statusRequest.RoomSid,
statusRequest.RoomStatus,
statusRequest.RoomType
);
return Ok();
}
}
您可以在项目的任何位置创建 RoomStatusRequest
class:
namespace RoomStatusCallback.Models;
public class RoomStatusRequest
{
public string AccountSid { get; set; }
public string RoomName { get; set; }
public string RoomSid { get; set; }
public string RoomStatus { get; set; }
public string RoomType { get; set; }
public string StatusCallbackEvent { get; set; }
public DateTime Timestamp { get; set; }
}
表单参数将根据您接收的事件类型而有所不同,因此您需要根据需要 add/remove 属性。 这个class不是all-encompassing绑定所有状态事件属性。
或者,您可以让 MVC 绑定到像这样的简单参数:
using Microsoft.AspNetCore.Mvc;
using RoomStatusCallback.Models;
namespace RoomStatusCallback.Controllers;
public class RoomController : Controller
{
private readonly ILogger<RoomController> logger;
public RoomController(ILogger<RoomController> logger)
{
this.logger = logger;
}
public ActionResult Status(
string roomName,
string roomSid,
string roomStatus,
string roomType
)
{
logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
roomName,
roomSid,
roomStatus,
roomType
);
return Ok();
}
}
无论您将 StatusCallbackMethod 配置为 POST 还是 GET,MVC 都会从 绑定它表单参数或分别查询字符串参数。
对于最小 API(端点),您可以为 POST 请求接受这样的参数:
app.MapPost("/minimal/room/status", async (HttpRequest request) =>
{
var form = await request.ReadFormAsync();
var roomName = form["RoomName"];
var roomSid = form["RoomSid"];
var roomStatus = form["RoomStatus"];
var roomType = form["RoomType"];
app.Logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
roomName,
roomSid,
roomStatus,
roomType
);
return Results.Ok();
});
从请求中获取表单,然后使用字符串索引检索各个参数。
对于 GET 请求:
app.MapGet("/minimal/room/status", (
[FromQuery] string roomName,
[FromQuery] string roomSid,
[FromQuery] string roomStatus,
[FromQuery] string roomType
) =>
{
app.Logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
roomName,
roomSid,
roomStatus,
roomType
);
return Results.Ok();
});
app.Run();
您可以像在 MVC 中一样使用单独的参数绑定。您不需要指定 [FromQuery]
但我喜欢这样做。如果你不使用 [FromQuery]
,ASP.NET 也会查看路由值,headers,以及更多绑定到你的参数。
对于上面的所有示例,参数和 属性 名称必须与表单参数中的名称匹配,尽管您可以使用某些属性来更改它,但我建议研究 MVC Model Binding and Minimal API Parameter Binding 了解更多信息。
您可以找到 source code for these samples and a sample to create the video room in this GitHub repository.
我正在为使用 Twilio 的视频通话的状态回调创建一个 webhook。问题是我想过滤发生的事件,以便我可以使用该信息做一些其他事情。创建视频通话时如何接收这些事件?
在 ASP.NET Core 中,您可以使用 MVC 或 Minimal APIs(端点)处理 webhook。
MVC 控制器能够将表单参数绑定到 strongly-typed object 参数(也称为模型绑定)或简单参数。
这是一个控制器,它将表单参数绑定到 RoomStatusRequest
的实例,然后记录它的一些属性:
using Microsoft.AspNetCore.Mvc;
using RoomStatusCallback.Models;
namespace RoomStatusCallback.Controllers;
public class RoomController : Controller
{
private readonly ILogger<RoomController> logger;
public RoomController(ILogger<RoomController> logger)
{
this.logger = logger;
}
public ActionResult Status(RoomStatusRequest statusRequest)
{
logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
statusRequest.RoomName,
statusRequest.RoomSid,
statusRequest.RoomStatus,
statusRequest.RoomType
);
return Ok();
}
}
您可以在项目的任何位置创建 RoomStatusRequest
class:
namespace RoomStatusCallback.Models;
public class RoomStatusRequest
{
public string AccountSid { get; set; }
public string RoomName { get; set; }
public string RoomSid { get; set; }
public string RoomStatus { get; set; }
public string RoomType { get; set; }
public string StatusCallbackEvent { get; set; }
public DateTime Timestamp { get; set; }
}
表单参数将根据您接收的事件类型而有所不同,因此您需要根据需要 add/remove 属性。 这个class不是all-encompassing绑定所有状态事件属性。
或者,您可以让 MVC 绑定到像这样的简单参数:
using Microsoft.AspNetCore.Mvc;
using RoomStatusCallback.Models;
namespace RoomStatusCallback.Controllers;
public class RoomController : Controller
{
private readonly ILogger<RoomController> logger;
public RoomController(ILogger<RoomController> logger)
{
this.logger = logger;
}
public ActionResult Status(
string roomName,
string roomSid,
string roomStatus,
string roomType
)
{
logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
roomName,
roomSid,
roomStatus,
roomType
);
return Ok();
}
}
无论您将 StatusCallbackMethod 配置为 POST 还是 GET,MVC 都会从 绑定它表单参数或分别查询字符串参数。
对于最小 API(端点),您可以为 POST 请求接受这样的参数:
app.MapPost("/minimal/room/status", async (HttpRequest request) =>
{
var form = await request.ReadFormAsync();
var roomName = form["RoomName"];
var roomSid = form["RoomSid"];
var roomStatus = form["RoomStatus"];
var roomType = form["RoomType"];
app.Logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
roomName,
roomSid,
roomStatus,
roomType
);
return Results.Ok();
});
从请求中获取表单,然后使用字符串索引检索各个参数。
对于 GET 请求:
app.MapGet("/minimal/room/status", (
[FromQuery] string roomName,
[FromQuery] string roomSid,
[FromQuery] string roomStatus,
[FromQuery] string roomType
) =>
{
app.Logger.LogInformation(@"Room created
Name: {RoomName}
Sid: {RoomSid}
Status: {RoomStatus}
Type: {RoomType}",
roomName,
roomSid,
roomStatus,
roomType
);
return Results.Ok();
});
app.Run();
您可以像在 MVC 中一样使用单独的参数绑定。您不需要指定 [FromQuery]
但我喜欢这样做。如果你不使用 [FromQuery]
,ASP.NET 也会查看路由值,headers,以及更多绑定到你的参数。
对于上面的所有示例,参数和 属性 名称必须与表单参数中的名称匹配,尽管您可以使用某些属性来更改它,但我建议研究 MVC Model Binding and Minimal API Parameter Binding 了解更多信息。
您可以找到 source code for these samples and a sample to create the video room in this GitHub repository.