我正在使用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" })">
也没有成功。
答案 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"})