【问题标题】:Can you do something like RoutePrefix with parameters?你能用参数做一些像RoutePrefix这样的事情吗?
【发布时间】:2014-08-06 14:41:18
【问题描述】:

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

我尝试了什么

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

代码

[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;
    }
}

【问题讨论】:

    标签: c# asp.net-mvc routes asp.net-mvc-5


    【解决方案1】:

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

    [RoutePrefix("{projectName}/usergroups")]
    public class UsergroupController : Controller
    {
        [Route("")]
        public ActionResult Index(string projectName)
        {
            ...
        }
    }
    

    【讨论】:

    • 好吧,我可以在控制器构造中使用 DI 执行此操作,该 DI 将从 Url 收集路由信息,但我认为这不是最好的方法。太复杂了。
    • 自定义属性可能介于两者之间?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多