你能用参数做一些像RoutePrefix这样的事情吗?
Posted
技术标签:
【中文标题】你能用参数做一些像RoutePrefix这样的事情吗?【英文标题】:Can you do something like RoutePrefix with parameters? 【发布时间】: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;
【问题讨论】:
【参考方案1】:你可以有一个带参数的路由前缀,但你的操作方法仍然必须接受参数,就像它是它们路由的一部分一样。您无法满足控制器构造函数的依赖关系:
[RoutePrefix("projectName/usergroups")]
public class UsergroupController : Controller
[Route("")]
public ActionResult Index(string projectName)
...
【讨论】:
好吧,我可以在控制器构造中使用 DI 执行此操作,该 DI 将从 Url 收集路由信息,但我认为这不是最好的方法。太复杂了。 自定义属性可能介于两者之间?以上是关于你能用参数做一些像RoutePrefix这样的事情吗?的主要内容,如果未能解决你的问题,请参考以下文章
你能用rails中的正则表达式做一个where find吗?
What exactly can you do with Python? Here are Python’s 3 main applications._你能用Python做什么?下面是Python的3