首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能用参数做一些像RoutePrefix这样的事情吗?

你能用参数做一些像RoutePrefix这样的事情吗?
EN

Stack Overflow用户
提问于 2014-06-16 17:47:30
回答 1查看 5.2K关注 0票数 11

我想知道我是否可以做一些类似RoutePrefix("{projectName}/usergroups")的事情,因为我有很多项目,每个项目都包含用户组。现在,在每个Usergroup控制器中,我首先需要得到绑定到的Project。这个是可能的吗?

我试过什么

我尝试简单地执行RoutePrefix("projects/{projectName}"),然后在控制器构造函数中传递它,但是它不是那样工作的。我还试图在控制器级别上使用Route而不是RoutePrefix,但是我的内部路由不起作用。

代码

代码语言:javascript
复制
[RoutePrefix("projects"), Authorization]
public class UsergroupController : Controller
{
    private readonly Project _project; // i would like to inject it here on constructor
    private readonly Account _account;
    private readonly IProjectRepository _projectRepository;

    public UsergroupController(IAuthorizationService auth, IProjectRepository projectRepository)
    {
        _projectRepository = projectRepository;
        _account = auth.GetCurrentAccount();
    }

    [Route("{projectName}/usergroups"), HttpGet]
    public ActionResult Index(string projectName)
    {
        // the problem that i will need to pass projectName
        // to every action and do this check in every action as well
        //
        // looks like totally ugly code-duplication
        var project = _projectRepository
            .GetByAccountId(_account.Id.ToString())
            .SingleOrDefault(x => x.Name == projectName);

        if (project == null)
        {
            return HttpNotFound();
        }

        // now get all usergroups in this project e.g. project.Usergroups

        return null;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-16 18:11:19

您可以有一个接受参数的路由前缀,但是您的操作方法仍然必须接受该参数,就像它是其路由的一部分一样。您无法满足来自控制器构造函数的依赖:

代码语言:javascript
复制
[RoutePrefix("{projectName}/usergroups")]
public class UsergroupController : Controller
{
    [Route("")]
    public ActionResult Index(string projectName)
    {
        ...
    }
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24249347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档