diff --git a/src/Twilio.AspNet.Core/MinimalApiTwiMLResult.cs b/src/Twilio.AspNet.Core/MinimalApiTwiMLResult.cs
index 6b5e9f7..a519615 100644
--- a/src/Twilio.AspNet.Core/MinimalApiTwiMLResult.cs
+++ b/src/Twilio.AspNet.Core/MinimalApiTwiMLResult.cs
@@ -41,5 +41,6 @@ public partial class TwiMLResult : IResult
/// Writes the TwiML to the HTTP response body
///
/// The HttpContext containing the Response to write the TwiML to
- public Task ExecuteAsync(HttpContext httpContext) => WriteTwiMLToResponse(httpContext.Response);
+ public Task ExecuteAsync(HttpContext httpContext)
+ => WriteTwiMLToResponse(httpContext.Response, httpContext.RequestAborted);
}
\ No newline at end of file
diff --git a/src/Twilio.AspNet.Core/TwiMLResult.cs b/src/Twilio.AspNet.Core/TwiMLResult.cs
index 9f6f648..9973d9b 100644
--- a/src/Twilio.AspNet.Core/TwiMLResult.cs
+++ b/src/Twilio.AspNet.Core/TwiMLResult.cs
@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.Threading;
+using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@@ -17,7 +18,7 @@ public partial class TwiMLResult : IActionResult
public TwiMLResult(TwiML.TwiML twiml) : this(twiml, SaveOptions.None)
{
}
-
+
/// The TwiML to respond with
/// Specifies how to format TwiML
public TwiMLResult(TwiML.TwiML twiml, SaveOptions formattingOptions)
@@ -29,20 +30,29 @@ public TwiMLResult(TwiML.TwiML twiml, SaveOptions formattingOptions)
public async Task ExecuteResultAsync(ActionContext actionContext)
{
var response = actionContext.HttpContext.Response;
- await WriteTwiMLToResponse(response);
+ await WriteTwiMLToResponse(response, actionContext.HttpContext.RequestAborted)
+ .ConfigureAwait(false);
}
-
- private async Task WriteTwiMLToResponse(HttpResponse response)
+
+ private async Task WriteTwiMLToResponse(HttpResponse response, CancellationToken cancellationToken)
{
response.ContentType = "application/xml";
if (twiml == null)
{
- await response.WriteAsync("");
+ await response.WriteAsync("", cancellationToken)
+ .ConfigureAwait(false);
return;
}
- var data = twiml.ToString(formattingOptions);
- await response.WriteAsync(data);
+ var doc = twiml.ToXDocument();
+
+#if NET5_0_OR_GREATER
+ await doc.SaveAsync(response.Body, formattingOptions, cancellationToken)
+ .ConfigureAwait(false);
+#else
+ await response.WriteAsync(doc.ToString(formattingOptions), cancellationToken)
+ .ConfigureAwait(false);
+#endif
}
}
-}
+}
\ No newline at end of file
diff --git a/src/Twilio.AspNet.Core/ValidateRequestAttribute.cs b/src/Twilio.AspNet.Core/ValidateRequestAttribute.cs
index a4189ce..2c05627 100644
--- a/src/Twilio.AspNet.Core/ValidateRequestAttribute.cs
+++ b/src/Twilio.AspNet.Core/ValidateRequestAttribute.cs
@@ -60,7 +60,7 @@ public override void OnActionExecuting(ActionExecutingContext filterContext)
var httpContext = filterContext.HttpContext;
var request = httpContext.Request;
string urlOverride = null;
- if (BaseUrlOverride != null)
+ if (!string.IsNullOrEmpty(BaseUrlOverride))
{
urlOverride = $"{BaseUrlOverride}{request.Path}{request.QueryString}";
}
diff --git a/src/Twilio.AspNet.Core/ValidateTwilioRequestFilter.cs b/src/Twilio.AspNet.Core/ValidateTwilioRequestFilter.cs
index fb01f8b..f72b233 100644
--- a/src/Twilio.AspNet.Core/ValidateTwilioRequestFilter.cs
+++ b/src/Twilio.AspNet.Core/ValidateTwilioRequestFilter.cs
@@ -28,7 +28,7 @@ public ValidateTwilioRequestFilter(IServiceProvider serviceProvider)
AllowLocal = options.AllowLocal ?? true;
}
- public async ValueTask