其他分享
首页 > 其他分享> > 找不到条纹Webhook控制器

找不到条纹Webhook控制器

作者:互联网

我有以下内容:

public class StripeController : Controller
{

    private readonly UserService _userService;

    public StripeController(UserService userService)
    {
        _userService = userService;
    }

    [HttpPost]

    public ActionResult StripeWebook()
    {
        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }


    [HttpPost]
    [Route("api/stripewebhook")]
    public async Task<ActionResult> Index(CancellationToken ct)
    {
        var json = new StreamReader(Request.InputStream).ReadToEnd();

        var stripeEvent = StripeEventUtility.ParseEvent(json);

        switch (stripeEvent.Type)
        {
            case StripeEvents.ChargeRefunded:  // all of the types available are listed in StripeEvents
                var stripeCharge = Stripe.Mapper<StripeCharge>.MapFromJson(stripeEvent.Data.Object.ToString());
                break;
        }

        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }


}

并且来自条带的请求生成错误:

The controller for path ‘/api/stripewebhook’ was not found or does not implement IController

从条纹门户网站进行测试时,为什么会发生这种情况?

解决方法:

使用WebApi 2可以正常工作.

这是最小的WebApi控制器开头:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Http;

    namespace WebApplication1.Controllers
    {
        public class StripeController : ApiController
        {
            [HttpPost]
            [Route("api/stripewebhook")]
            public IHttpActionResult Index()
            {
                var json = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
                return Ok();
            }
        }
    }

如果您从VS执行此操作,则可以从http://localhost:(port)/api/stripewebhook访问它

现在,您只需要扩展它即可包含条带代码:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Http;

    namespace WebApplication1.Controllers
    {
        public class StripeController : ApiController
        {
            [HttpPost]
            [Route("api/stripewebhook")]
            public IHttpActionResult Index()
            {
                var json = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();

                var stripeEvent = StripeEventUtility.ParseEvent(json);

                switch (stripeEvent.Type)
                {
                    case StripeEvents.ChargeRefunded:  // all of the types available are listed in StripeEvents
                        var stripeCharge = Stripe.Mapper<StripeCharge>.MapFromJson(stripeEvent.Data.Object.ToString());
                        break;
                }

                return Ok();
            }
        }
    }

标签:stripe-payments,asp-net-web-api,c,net,asp-net-mvc
来源: https://codeday.me/bug/20191026/1933379.html