Как инициализировать приемник веб-перехватчика в ASP.Net MVC

Я следую этому руководству здесь по установке и использованию веб-перехватчиков. в ASP.Net MVC, но похоже, что это руководство предназначено для проекта типа wep api. Я использую проект типа MVC, и в отличие от проекта API нет метода регистрации. В MVC у нас есть метод RegisterRoutes. Итак, как мне зарегистрировать свои веб-хуки в MVC?

проект API, который использует регистрацию и настройку, на моем сайте ASP.Net MVC этого нет.

введите здесь описание изображения

MVC использует RegisterRoutes

введите здесь описание изображения

UPdate Здесь я добавил контроллер веб-API, и приведенный ниже код — это то, что находится в контроллере веб-API. Я включил пакеты nuget для веб-перехватчиков, регистрацию в global.asax.cs и в методе регистрации. Но у меня все еще есть проблемы с кодом «ExecuteAsync», точки останова не срабатывают.

public class StripeWebHookHandler : WebHookHandler
{
    // ngrok http -host-header="localhost:[port]" [port]
    // http(s)://<yourhost>/api/webhooks/incoming/stripe/   strip receiver

    public StripeWebHookHandler()
    {
        this.Receiver = StripeWebHookReceiver.ReceiverName;
    }

    public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
    {
        // For more information about Stripe WebHook payloads, please see 
        // 'https://stripe.com/docs/webhooks'
        StripeEvent entry = context.GetDataOrDefault<StripeEvent>();

        // We can trace to see what is going on.
        Trace.WriteLine(entry.ToString());

        // Switch over the event types if you want to
        switch (entry.EventType)
        {
            default:
                // Information can be returned in a plain text response
                context.Response = context.Request.CreateResponse();
                context.Response.Content = new StringContent(string.Format("Hello {0} event!", entry.EventType));
                break;
        }

        return Task.FromResult(true);
    }
}

person user1186050    schedule 25.10.2017    source источник
comment
Идем дальше, не размещайте изображения, размещайте код в вопросе.   -  person Shyju    schedule 26.10.2017
comment
привет у тебя получилось?   -  person coder771    schedule 15.10.2018


Ответы (1)


Вы можете смешивать контроллеры веб-API в своем проекте MVC. Когда вы добавляете контроллеры веб-API, у вас будет файл WebApiConfig.cs в App_Start, в котором вы будете определять маршрутизацию для веб-API. Именно здесь вы можете вызвать метод InitializeReceiveStripeWebHooks после добавления в проект необходимых пакетов nuget.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        // Load receivers
        config.InitializeReceiveStripeWebHooks();
    }
}

Когда вы создаете новый проект, Visual Studio предоставляет вам различные шаблоны проектов. Вы можете выбрать WebApi, который включает поддержку MVC и Web Api. Но если ваш проект создан с использованием шаблона MVC, он не будет поддерживать веб-API по умолчанию. В этом случае вы можете добавить его вручную, выполнив следующие действия.

Шаг 1

Создайте новый класс с именем WebApiConfig.cs в папке App_Start. Имейте ниже содержание в этом классе

using System.Web.Http;
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Шаг 2

Теперь перейдите к global.asax и обновите событие Application_Start, чтобы включить вызов метода Register в наш только что созданный класс WebApiConfig.

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);  // This is the new line

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Теперь вы можете щелкнуть правой кнопкой мыши проект и добавить новые классы WebApiController, и теперь веб-API должны работать.

person Shyju    schedule 26.10.2017
comment
Я добавил контроллер веб-API в свой проект MVC, но он не добавил файл webapiconfig.cs в папку App_Start!! - person user1186050; 26.10.2017
comment
Добавление подробного ответа на это через несколько минут. - person Shyju; 26.10.2017
comment
@ user1186050 VS этого не делает. Так что приходится делать это вручную. Просто выполните два шага из ответа. - person Shyju; 26.10.2017
comment
Привет. Хорошо, я сделал все это и добавил новый класс в контроллер веб-API для тестирования. Сейчас обновлю код. Но я все еще не могу найти точки останова внутри кода. И я вижу только сообщения об ошибках тайм-аута на панели управления Stripe. Я вижу запросы httppost, поступающие через ngrok (localhost: 4040) и на экране консоли, где работает ngrok, но ничего не пытается попасть в фактический метод «ExecuteAsync» в классе WEB Api. - person user1186050; 26.10.2017
comment
Ваш вопрос был не в том, как заставить его работать, а в том, где добавить вызов, чтобы включить его. Для этого я предлагаю вам задать вопрос конкретно об этом с соответствующей частью кода. - person Shyju; 26.10.2017