如何在WebApi中为注销操作创建URL

时间:2018-11-21 00:31:58

标签: asp.net-mvc asp.net-web-api routes

我正在使用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 :(得分:0)

您可以定义新路线来定义您的操作名称:

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

如果您不包括动作名称,则Web API会根据您的HTTP动词尝试为您找到合适的动作...例如,如果您发送Get请求,则Web API会尝试找到一个动作以“ Get”开头...,因为您的操作名称为Logout,所以默认的API路由约定无法将其与请求匹配。 see here for more info

然后此链接应调用操作(see here):

@Url.HttpRouteUrl("ActionApi", new {controller = "Account", action = "Logout"})