【问题标题】:.Net Core 3.0 WebAPI Attribute routing problem.Net Core 3.0 WebAPI 属性路由问题
【发布时间】:2019-11-06 19:59:20
【问题描述】:

客户 ID:1147947322680754 帕特:2a22564a5ce15dd46ee66468097ad0b9

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

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

这是 BaseController 的外观;

[ApiController]
public abstract class GKControllerBase : ControllerBase
{
    private readonly IHttpContextAccessor _accessor;

    public GKControllerBase(IHttpContextAccessor accessor)
    {
        this._accessor = accessor;
    }

}

这是 UserController.cs 的外观;

[ApiController]
[Route("Services/[controller]/[action]")]
public class UserController : GKControllerBase
{
    public UserController(IHttpContextAccessor accessor) : base(accessor)
    {
    }
    [HttpGet] //Services/User/Logout
    [UserTypeFilter(UserType.Anonymous, UserTypeFilterMode.SingularDeny, ErrorMessage = "You are not logged in!")]
    public object Logout()
    {
        if (GKManagers.SessionManager.TryGetCurrentUser(base.HttpContext, out User user))
        {
            GKManagers.SessionManager.Logout(base.HttpContext, user.UniqueId);

            return this.Answer(HttpStatusCode.OK, null, "Logout successful");
        }
        return this.Answer(HttpStatusCode.InternalServerError);
    }

    [HttpGet("{username}/{password}")] //Services/User/Login/username/password
    [UserTypeFilter(UserType.Anonymous, UserTypeFilterMode.SingularAllow, ErrorMessage = "You are already logged in!")]
    public object Login(string username, string password)
    {
        if (GKManagers.SessionManager.TryLogin(base.HttpContext, username, password, out User user))
            return this.Answer(HttpStatusCode.OK, user, "Login successful");
        return this.Answer(HttpStatusCode.InternalServerError);
    }

}

这是 GroupController.cs 的外观;

[ApiController]
[Route("Services/[controller]/[action]")]
public class GroupController : GKControllerBase
{
    public GroupController(IHttpContextAccessor accessor) : base(accessor)
    {
    }


    [HttpGet("{groupID:int}")] //Services/Group/Join/1
    [UserTypeFilter(UserType.Anonymous, UserTypeFilterMode.SingularDeny, ErrorMessage = "You are not logged in!")]
    [PermissionFilter
        (Data.Enums.ApplicationContext.Membership_Group, Operation.CanJoin, ErrorMessage = "You are not permitted to join the %groupName%. You might be already in it.")]
    public object Join(Int32 groupID)
    {
        if (GKManagers.SessionManager.TryGetCurrentUser(this.HttpContext, out User currentUser))
        {
            GKManagers.Database.Membership.GroupMembership.Add(new GroupMembership()
            {
                Group = groupID,
                User = currentUser.UserId,
                IsActive = true,
                JoinDate = DateTime.Now,
                LastActionDate = DateTime.Now,
                Status = (Int32)Status.Active,
            });

        }
        return this.Answer(HttpStatusCode.InternalServerError);
    }
}

我正在尝试将路由配置为看起来像属性旁边的注释部分。

提前致谢!

【问题讨论】:

  • 我在asp.net core 3.0 web api项目中使用你的代码(去掉过滤器和无关代码)没有问题。你在新项目中试过了吗?那些过滤器属性对路由?

标签: asp.net-core asp.net-mvc-routing asp.net-core-webapi .net-core-3.0 asp.net-core-3.0


【解决方案1】:

将控制器路由更改为:

[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 页面
  • @GökhanKutucularoğlu Here 我已经在不同的控制器上实现了一个带有属性路由和基于约定的路由的示例控制器,这不完全是你的答案,但它与你的问题相似,它已经过测试并且可以工作。 **请注意控制器和操作是如何装饰的,以及我如何针对每种情况更改 app.UseMvc 方法。在属性路由中应该是app.UseMvc();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多