ASP.NET MVC 视图或 URL 应该有多深?

2024-02-02

我还在学习 ASP.NET MVC。使用网络表单,我将创建一个新文件夹,我们将其命名为 admin。在那里我可能有很多关于 create_product、edit_product 等的页面。所以 URL 可能看起来像http://somesite.com/admin/create_product.aspx http://somesite.com/admin/create_product.aspx.

但对于 MVC 来说,情况有些不同。我正在尝试看看什么是最好的方法来做到这一点。

会做http://somesite.com/admin/product/create http://somesite.com/admin/product/create对吗?或者应该只是http://somesite.com/product/create http://somesite.com/product/create?如果我按照第一种方式进行操作,我是否将所有内容都放入“管理”控制器中,还是应该将其分离到“产品”控制器中?

我知道这可能是主观或个人的选择,但我想得到一些建议。

Thanks.


ASP.NET MVC(更一般地说,.NET 3.5 SP1 中所有 ASP.NET 所共有的 URL 路由引擎)的部分好处是可以灵活配置 URL 以映射到您喜欢的任何文件夹/文件结构。这意味着在开始构建项目后修改 URL 比 WebForms 时代要容易得多。

对于您的具体问题:

  • 一个管理控制器与一个产品控制器- 一般来说,指导是让控制器保持专注,以便它们更容易测试和维护。出于这个原因,我建议对每个对象类型(例如产品)使用一个控制器来执行 CRUD 操作。您的案例示例:

    /管理/产品/创建

    /admin/product/edit/34 或 /admin/product/edit/red-shoes (if名字是唯一的)

    无论哪种情况,“创建”、“编辑”、“详细信息”操作都将位于 ProductController 中。您可能只是为“管理操作”(如创建和编辑)设置了自定义路由,以限制其使用(并将“管理”文本添加到 URL),然后您网站的所有访问者都可以使用“详细信息”操作。

  • Securing Admin Views - One important fact to remember with MVC: all requests go directly to controllers, not views. That means the old "secure a directory with web.config" does not apply (usually) to MVC for securing your Admin. Instead, you should now apply security directly to the controllers. This can easily be achieved by using attributes to Controller classes like:
    • [授权] - 仅检查用户是否已登录
    • [Authorize(Roles = "Admin")] - 限制特定用户角色
    • [Authorize(Users = "Joe")] - 仅限特定用户

您甚至可以为站点中的“管理”视图创建自定义路由,并通过在 URL 路由中强制执行授权检查来限制对这些视图的访问,如下所示:

routes.MapRoute(
  "Admin",
  "Admin/{controller}/{action}",
  new { controller = "Product", action = "Index" },
  new { authenticated= new 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;
  }
}

Stephen Walther 博客上有详细信息:ASP.NET MVC 技巧 #30 – 创建自定义路由约束 http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 视图或 URL 应该有多深? 的相关文章

  • ASP.NET Core Tag Helper Checkbox 不保存未选中的值

    我正在使用标签帮助程序在 MVC 表单中添加一个复选框 div class form group div
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何使用C#在asp.net中下载xml文件

    我正在使用网络应用程序ASP NET 与 MVC3 我是 mvc3 的新手 我的网页上有一个下载按钮 当我要单击下载按钮时 我希望能够打开该 XML 文件 我尝试过一些代码更改动作结果但我没有打开文件 通过使用下面提到的代码 我收到一个下载
  • 检测 ASP.NET MVC 上的会话过期

    我构建了一个购物车 它使用会话状态在用户浏览商店时保留购物车数据 我遇到一个问题 如果我在购物车的第 1 步上长时间打开浏览器窗口 然后按 转到第 2 步 我的操作会引发错误 因为第 2 步操作假定会话尚未过期并且ShopCart 对象处于
  • 元数据集合中不存在标识为“ ”的成员。\r\n参数名称: Identity

    我在尝试调试时稍微简化了代码 HttpPost public ActionResult Register User model DateTime bla new DateTime 2012 12 12 try User user new U
  • 将 ninject 与 Ninject.Web.Api 用于 Web Api 2 一起使用在 ASP.NET MVC 5 中不起作用

    我正在开发一个 Asp NET MVC 项目 我的项目也有 web api 我正在使用 ASP NET MVC5 和 Web Api 2 以及 Visual Studio 3 我正在使用 ninject 进行依赖项注入 我知道 ninjec
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 一个模型可以通过多个编辑器模板传递吗?

    我尝试使用编辑器模板显示视图模型 该模板在应用基本对象编辑器模板之前将模型包装在字段集中 My view model Mvc3VanillaApplication Models ContactModel using Html BeginFo
  • 会话过期时将部分视图重定向到登录页面

    是否有一种简单的方法可以在会话过期后将整个页面 而不仅仅是部分视图 重定向到登录页面 我已尝试以下解决方案 但无法使其工作 Net MVC Partial View 会话过期时加载登录页面 https stackoverflow com q
  • 临时数据持久化

    我一直在与TempData最近面临一个令人困惑的案例 假设TempData在以下操作中创建 public ActionResult MyAction1 myTempData TempData myTempData 预计将在以下 Action
  • 将视图文件作为资源嵌入二进制文件中

    我正在尝试创建一个带有少量控制器的 Net 库 并且我想在多个 Web 项目中重用它们 我已经完成一半了 但我遇到的问题是 每当我将库添加到新的 Web 项目时 我需要将所有相应的视图文件单独复制到新项目中 每当我更新库时 我都需要再次重复
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 在 MVC 控制器内打开 websocket 通道

    有没有人有在 MVC 控制器内打开 websocket 连接的良好经验 技术栈 ASPNET Core 1 0 RC1 MVC dnx46 System Net WebSockets 为什么使用 MVC 而不是中间件 为了整体一致性 路由
  • 新 ASP.NET MVC 3 站点的 Razor 与 Webforms 视图引擎

    剃刀更漂亮 而且是新的 因此很酷 Webforms 是我已经熟悉的东西 当然 我毫无疑问会去学习新东西 Razor 但我听说有两个令我担心的缺点 无法轻松重用现有的 Web 表单控件 在极少数情况下 我可能需要拖动一些东西 我会重申 罕见
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重

随机推荐