具有基本身份验证的 Twilio C# recordingStatusCallback uri
Twilio C# recordingStatusCallback uri with Basic Authentication
到目前为止,我的整个 C#/Twilio 应用程序一直在完美地使用带有基本身份验证的 HTTPS。我正在使用 C# TwiML 包装器 类 创建和 return 拨号 TwiML 命令。
var helper = new UrlHelper(Request.RequestContext);
var recordingUri = helper.ActionUri("Process", "RecordingCallBack");
var vr = new VoiceResponse();
var dial = new Dial("xxx-xxx-xxxx", record: record, timeout: 15,recordingStatusCallback: recordingUri,
recordingStatusCallbackEvent: recEvent, recordingStatusCallbackMethod:HttpMethod.Get);
return TwiML(vr.Append(dial));
问题是 recordingStatusCallback 被 returned 为 401 Unauthorized 并且永远不会发送具有适当凭据的后续请求。当我将我的操作移至不受保护的控制器时,请求处理正常,但我不想暴露此端点。如何使用基本身份验证配置录音回调 url?
使用@Chetan Ranpariya 的上述评论,我创建了以下验证属性:
[AttributeUsage(AttributeTargets.Method)]
public class ValidateTwilioRequestAttribute : ActionFilterAttribute
{
private readonly RequestValidator _requestValidator;
public ValidateTwilioRequestAttribute()
{
var authToken = ConfigurationManager.AppSettings["TwilioAuthToken"];
_requestValidator = new RequestValidator(authToken);
}
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
var context = actionContext.HttpContext;
if (!IsValidRequest(context.Request))
{
actionContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden);
}
base.OnActionExecuting(actionContext);
}
private bool IsValidRequest(HttpRequestBase request)
{
var signature = request.Headers["X-Twilio-Signature"];
var requestUrl = request.Url.AbsoluteUri;
return _requestValidator.Validate(requestUrl, request.Form, signature);
}
}
并相应地装饰我的回调操作:
[ValidateTwilioRequest]
public ActionResult Process()
{
//do call back work
}
到目前为止,我的整个 C#/Twilio 应用程序一直在完美地使用带有基本身份验证的 HTTPS。我正在使用 C# TwiML 包装器 类 创建和 return 拨号 TwiML 命令。
var helper = new UrlHelper(Request.RequestContext);
var recordingUri = helper.ActionUri("Process", "RecordingCallBack");
var vr = new VoiceResponse();
var dial = new Dial("xxx-xxx-xxxx", record: record, timeout: 15,recordingStatusCallback: recordingUri,
recordingStatusCallbackEvent: recEvent, recordingStatusCallbackMethod:HttpMethod.Get);
return TwiML(vr.Append(dial));
问题是 recordingStatusCallback 被 returned 为 401 Unauthorized 并且永远不会发送具有适当凭据的后续请求。当我将我的操作移至不受保护的控制器时,请求处理正常,但我不想暴露此端点。如何使用基本身份验证配置录音回调 url?
使用@Chetan Ranpariya 的上述评论,我创建了以下验证属性:
[AttributeUsage(AttributeTargets.Method)]
public class ValidateTwilioRequestAttribute : ActionFilterAttribute
{
private readonly RequestValidator _requestValidator;
public ValidateTwilioRequestAttribute()
{
var authToken = ConfigurationManager.AppSettings["TwilioAuthToken"];
_requestValidator = new RequestValidator(authToken);
}
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
var context = actionContext.HttpContext;
if (!IsValidRequest(context.Request))
{
actionContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden);
}
base.OnActionExecuting(actionContext);
}
private bool IsValidRequest(HttpRequestBase request)
{
var signature = request.Headers["X-Twilio-Signature"];
var requestUrl = request.Url.AbsoluteUri;
return _requestValidator.Validate(requestUrl, request.Form, signature);
}
}
并相应地装饰我的回调操作:
[ValidateTwilioRequest]
public ActionResult Process()
{
//do call back work
}