Как создать URL для действия выхода из системы в WebApi - PullRequest
0 голосов
/ 21 ноября 2018

Я использую Visual Studio 2017 ..... при создании проекта был создан AccountController с этим действием:

    // POST api/Account/Logout
    [Route("Logout")]
    public IHttpActionResult Logout()
    {
        Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);
        return Ok();
    }

С другой стороны, этот маршрут был создан по умолчанию:

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

Мне нужно сделать очень простую вещь.Как я могу получить URL выхода из системы в виде?

Я пытался

@Url.Action("Logout", "Account", new { httproute = "DefaultApi" })

Но это не сработало, поскольку DefaultApi не содержит действие, в результате чего действие добавляется как запросстроковый параметр.

Если я не использую свойство httproute, URL создается, но без части "api", из-за которой среда не может его найти.

Я даже пытался

@Url.RouteUrl("DefaultApi", new { httproute = "Logout", controller = "Account" })">

тоже безуспешно.

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете определить новый маршрут для определения имени действия:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

Если вы не включите имя действия, Web API попытается найти подходящее действие для вас на основе вашего глагола HTTP... например, если вы отправляете запрос Get, веб-API пытается найти действие, начинающееся с 'Get' ..., поскольку ваше имя действия Logout, соглашение о маршрутизации API по умолчанию не может сопоставить его с запросом. см. Здесь для получения дополнительной информации

Тогда эта ссылка должна вызывать действие ( см. Здесь ):

@Url.HttpRouteUrl("ActionApi", new {controller = "Account", action = "Logout"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...