【发布时间】:2015-05-16 17:26:53
【问题描述】:
我想为我的公共/匿名控制器和来自管理员/经过身份验证的控制器和视图的视图提供一些 URL 分离。所以我最终完全使用了Attribute Routing,以便更好地控制我的网址。我希望我的公共 URL 以“~/Admin/etc”开头。而我的公共 URL 不会有任何这样的前缀。
公共控制器(几个之一)
[RoutePrefix("Home")]
public class HomeController : Controller
{
[Route("Index")]
public ActionResult Index()
{ //etc. }
}
管理控制器(几个之一)
[RoutePrefix("Admin/People")]
public class PeopleController : Controller
{
[Route("Index")]
public ActionResult Index()
{ //etc. }
}
这允许我拥有公共 URL,例如:
http://myapp/home/someaction
...和管理员/经过身份验证的 URL,例如:
http://myapp/admin/people/someaction
但是现在我想根据用户是在站点的管理部分还是公共部分在视图中做一些动态的事情。如何以编程方式正确访问它?
我知道我可以做类似的事情
if (Request.Url.LocalPath.StartsWith("/Admin"))
...但它感觉“hacky”。我知道我可以通过
访问控制器和操作名称HttpContext.Current.Request.RequestContext.RouteData.Values
...但是“admin”部分并没有反映在那里,因为它只是一个路由前缀,而不是实际的控制器名称。
那么,基本问题是,我如何以编程方式确定当前加载的视图是否在“admin”部分下?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing attributerouting