ASP.NET WebHooks - Управление версиями - PullRequest
0 голосов
/ 15 октября 2018

Я хотел бы использовать для нашего проекта библиотеку Microsoft.AspNet.WebHooks.Receivers.Stripe .Однако мой WebApi имеет значение ApiVersion ( Microsoft.AspNet.WebApi.Versioning ).Это как-то мешает URL-адресу WebHooks по умолчанию:

https://<host>/api/webhooks/incoming/<receiver>

Я использую образец StripeWebHookHandler из примеров AspNet.Я попытался поставить ApiVersion на WebHookHandler следующим образом, но безуспешно:

[ApiVersion("1")]
[RoutePrefix("api/v{version:apiVersion}/webhooks/incoming/stripe")]
public class StripeWebHookHandler : WebHookHandler

Я предполагаю, что это должно быть распространенной проблемой, однако у меня нетнашел какое-либо решение для этого, есть ли в любом случае:

1) чтобы URL-адрес webhook был версионирован с использованием предоставленного StripeWebHookHandler .

2), чтобы отключить управление версиями для этого конкретногоURL (также использовался атрибут [ApiVersionNeutral] ).

1 Ответ

0 голосов
/ 19 октября 2018

Я фактически закончил тем, что создал свой собственный контроллер веб-API, который обрабатывает Stripe WebHook.Если кому-то интересно, он может использовать этот фрагмент кода, который был адаптирован из документации Stripe, для соответствия нашему контроллеру Web API.

Вам необходим официальный пакет .net Stripe nuget, чтобы иметь возможность использовать этот код.

[ApiVersion("1")]
    [RoutePrefix("api/v{version:apiVersion}/webhook")]
    public class WebHookController : BaseApiController
    {
        // You can find your endpoint's secret in your webhook settings
        private readonly string StripeWebHookSecret;

        public WebHookController()
        {
            StripeWebHookSecret = WebConfigurationManager.AppSettings["StripeWebHookSecret"];
            // Set your secret key: remember to change this to your live secret key in production
            // See your keys here: https://dashboard.stripe.com/account/apikeys
            var stripeApiSecret = WebConfigurationManager.AppSettings["StripeApiSecret"];
            StripeConfiguration.SetApiKey(stripeApiSecret);
        }

        [Route("stripe")]
        [HttpPost]
        public async Task<HttpResponseMessage> StripeWebHook()
        {
            var json = await Request.Content.ReadAsStringAsync();

            try
            {
                var result = Request.Headers.TryGetValues("Stripe-Signature", out IEnumerable<string> headerValues);
                if (!result)
                    return new HttpResponseMessage(HttpStatusCode.BadRequest);

                var stripeEvent = StripeEventUtility.ConstructEvent(json, headerValues.FirstOrDefault(), StripeWebHookSecret);
...