我还在学习ASP.NET MVC.使用webforms,我会创建一个新文件夹,让我们称之为管理员.在那里,我可能有很多页面用于create_product,edit_product等.因此URL可能看起来像http://somesite.com/admin/create_product.aspx.
但是对于MVC来说,它有点不同.我试图看看这是最好的方法.
请http://somesite.com/admin/product/create做对吗?或者它应该只是http://somesite.com/product/create?如果我是第一种方式,我是否将所有内容都放在"admin"控制器中,还是应该将其分成"产品"控制器?
我知道这可能是主观或个人选择,但我想得到一些建议.
谢谢.
Tod*_*odd 11
ASP.NET MVC的一部分好处(更一般地说,.NET 3.5 SP1中所有ASP.NET共有的URL路由引擎)的特点是URL可以灵活配置为映射到您喜欢的任何文件夹/文件结构.这意味着在开始构建项目之后,比WebForms更容易修改URL.
针对您的具体问题:
一个管理控制器与产品控制器 - 通常,指导是保持控制器的重点,以便更容易测试和维护.出于这个原因,我建议在每个对象类型(如Product)中使用单个控制器和CRUD操作.你的案例中的例子:
/管理/产品/创建
/ admin/product/edit/34或/ admin/product/edit/red-shoes(如果名称是唯一的)
在任何一种情况下,Create,Edit,Deatils操作都将在ProductController中.您可能只有"管理操作"(如"创建"和"编辑")的自定义路由限制其使用(并将"管理"文本添加到URL),然后"详细信息"操作将可供您站点的所有访问者使用.
您甚至可以在站点中为"管理"视图创建自定义路由,并通过在URL路由中强制执行授权检查来限制对这些视图的访问,如下所示:
routes.MapRoute(
"Admin",
"Admin/{controller}/{action}",
new { controller = "Product", action = "Index" },
new { authenticated= new AuthenticatedConstraint()}
);
Run Code Online (Sandbox Code Playgroud)
AuthenticatedConstraint的位置如下:
using System.Web;
using System.Web.Routing;
public class AuthenticatedConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return httpContext.Request.IsAuthenticated;
}
}
Run Code Online (Sandbox Code Playgroud)
有关Stephen Walther博客的详细信息: ASP.NET MVC提示#30 - 创建自定义路由约束
| 归档时间: |
|
| 查看次数: |
3151 次 |
| 最近记录: |