重用路线& Asp.Net核心控制器

时间:2016-06-21 12:06:13

标签: c# asp.net rest asp.net-web-api asp.net-core

我刚刚开始使用Asp.Net Core(以及一般的asp.net),我正在尝试为我的其余api构建不错的控制器类。

我正在尝试从基础控制器继承,以避免重新定义路由和逻辑,例如验证资源,如下所示(非工作示例):

[Route("/api/v1/users/{id}")]
public class UserController: Controller
{
    protected int userId;
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
        // Validate userId..
        userId = (int) RouteData.Values["id"];
    }

    [HttpGet]
    public IActionResult Info()
    {
        // Use this.userId here
        return this.Json("User info..");
    }
}

[Route("/friends")]
public class UserFriendsController: UserController
{
    [HttpGet]
    public IActionResult Info()
    {
        // Use this.userId here
        return this.Json("List of user's friends..");
    }
}

我意识到我可以把它放到一个有多个动作的单个类中,但是我的真实场景涉及更多的控制器,它们都可能想要从UserController继承。

2 个答案:

答案 0 :(得分:1)

无法继承路由属性。

您可以使用路由中间件。请参阅documentationthe examples on Routing github repo

此外,我可以推荐这篇ASP.NET Core 1.0 - Routing - Under the hood文章,因为它对路由的工作方式有很好的解释:

enter image description here

答案 1 :(得分:1)

  

我正在尝试从基本控制器继承以避免重新定义   路线和逻辑,例如资源验证

如果您想检查当前用户是否对资源具有访问权限,您应该使用 Resource Based Authorization 。对于其他横切问题,您可以使用FiltersMiddlewares