Asp.net core .Net Core 3.0 WebAPI属性路由问题

Asp.net core .Net Core 3.0 WebAPI属性路由问题,asp.net-core,asp.net-mvc-routing,asp.net-core-webapi,.net-core-3.0,asp.net-core-3.0,Asp.net Core,Asp.net Mvc Routing,Asp.net Core Webapi,.net Core 3.0,Asp.net Core 3.0,客户ID:1147947322680754 专利号:2a22564a5ce15dd46ee66468097ad0b9 在我的新api上尝试配置属性路由,但在数小时的阅读和挖掘源代码之后无法完成。你是我最后的选择。我做错了什么 我配置了app.UseMvc();在启动和使用以下代码 下面是BaseController的外观 [ApiController] 公共抽象类GKControllerBase:ControllerBase { 专用只读IHttpContextAccessor\u访问器; 公共

客户ID:1147947322680754 专利号:2a22564a5ce15dd46ee66468097ad0b9

在我的新api上尝试配置属性路由,但在数小时的阅读和挖掘源代码之后无法完成。你是我最后的选择。我做错了什么

我配置了app.UseMvc();在启动和使用以下代码

下面是BaseController的外观

[ApiController]
公共抽象类GKControllerBase:ControllerBase
{
专用只读IHttpContextAccessor\u访问器;
公共GKControllerBase(IHttpContextAccessor访问器)
{
这。\存取器=存取器;
}
}
下面是UserController.cs的外观

[ApiController]
[路由(“服务/[控制器]/[操作]”)]
公共类UserController:GKControllerBase
{
公共用户控制器(IHttpContextAccessor访问器):基本(访问器)
{
}
[HttpGet]//服务/用户/注销
[UserTypeFilter(UserType.Anonymous、UserTypeFilterMode.SingularDeny、ErrorMessage=“您未登录!”)
公共对象注销()
{
if(GKManagers.SessionManager.TryGetCurrentUser(base.HttpContext,out User))
{
GKManagers.SessionManager.Logout(base.HttpContext,user.UniqueId);
返回此.Answer(HttpStatusCode.OK,null,“注销成功”);
}
返回此.Answer(HttpStatusCode.InternalServerError);
}
[HttpGet(“{username}/{password}”)]///Services/User/Login/username/password
[UserTypeFilter(UserType.Anonymous、UserTypeFilterMode.SingularAllow、ErrorMessage=“您已登录!”)
公共对象登录(字符串用户名、字符串密码)
{
if(GKManagers.SessionManager.TryLogin(base.HttpContext、用户名、密码、out用户))
返回此答案(HttpStatusCode.OK,用户,“登录成功”);
返回此.Answer(HttpStatusCode.InternalServerError);
}
}
下面是GroupController.cs的外观

[ApiController]
[路由(“服务/[控制器]/[操作]”)]
公共类GroupController:GKControllerBase
{
公共组控制器(IHttpContextAccessor访问器):基本(访问器)
{
}
[HttpGet(“{groupID:int}”)]//Services/Group/Join/1
[UserTypeFilter(UserType.Anonymous、UserTypeFilterMode.SingularDeny、ErrorMessage=“您未登录!”)
[许可过滤器
(Data.Enums.ApplicationContext.Membership_组,Operation.CanJoin,ErrorMessage=“不允许您加入%groupName%。您可能已经加入了该组。”)
公共对象联接(Int32 groupID)
{
if(GKManagers.SessionManager.TryGetCurrentUser(this.HttpContext,out User currentUser))
{
GKManagers.Database.Membership.GroupMembership.Add(新的GroupMembership()
{
组=组ID,
User=currentUser.UserId,
IsActive=true,
JoinDate=日期时间。现在,
LastActionDate=日期时间。现在,
状态=(Int32)Status.Active,
});
}
返回此.Answer(HttpStatusCode.InternalServerError);
}
}
我试图将路由配置为与属性旁边的注释部分类似


提前谢谢

将控制器路由更改为:

[Route("Services/[controller]")]
在行动上,尝试以下方法:

[HttpGet("[action]")] // Services/User/Logout
[HttpGet("[action]/{groupID:int}")] // Services/Group/Join/1
[HttpGet("[action]/{username}/{password}")] // Services/User/Login/username/password
或类似以下内容:

[Route("[action]")] // Services/User/Logout
[HttpGet]

[Route("[action]/{groupID:int}")] // Services/Group/Join/1
[HttpGet]

[Route("[action]/{username}/{password}")] // Services/User/Login/username/password
[HttpGet]

对不起,先生,这并没有真正起作用。@GökhanKutucularoğlu您看到任何错误或什么吗?没有,只有404页没有found@GökhanKutucularoğlu我在不同的控制器上实现了一个具有属性路由和基于约定路由的示例控制器,这不完全是您的答案,但与您的问题类似,它已经过测试,正在运行**请注意控制器和动作是如何修饰的,以及我是如何更改应用程序的。针对每种情况使用MVC方法。在属性路由中,它应该是
app.UseMvc()。当我在asp.net core 3.0 web api项目中使用您的代码(删除筛选器和不相关的代码)时没有问题。您在新项目中尝试过吗?这些筛选器属性对路由有影响吗?