繁体   English   中英

ASP.NET MVC路由与特定操作

[英]ASP.NET MVC Routing vs Specific Actions

我对完成事情的方式有些困惑。 我的网站可以向用户显示故事的提要,并且提要可以是多个类别之一。 (例如,您可以查看“所有故事” Feed或“我的提交” Feed)。

在处理路由方面,这样做是否更有意义:

1)让一个动作(主页/索引)通过以下路由处理不同的“ storyCategory”参数:

[Route("~/"), Route("")] //Index will be default route for both SiteRoot and SiteRoot/Home
[Route("{storyCategory?}/{page?}")]
[Route("{storyCategory?}/Page/{page?}")]
public ActionResult Index(Story.Category storyCategory = Story.Category.None, int page = 1)

要么

2)对每个storyCategory都有特定的操作,而不是将枚举作为参数传递:

[Route("~/"), Route("")] //Index will be default route for both SiteRoot and SiteRoot/Home
public ActionResult Index(int page = 1) 
public ActionResult ReadLater(int page = 1) 
public ActionResult PlanToUse(int page = 1)

如果您的所有供稿彼此完全相同,并且只需执行一些操作且参数始终相同,则第一个选项似乎很明显...

但是,例如,如果将来您希望其中一个提要中具有不同的“ ReadLater”(具有不同的参数),那么您可能会后悔选择了第一个选项。

由于以下原因,我将选择第二种方法:

  • 行动灵活性;
  • URL由操作名称定义(不在“索引”操作顶部硬编码);
  • 可以根据控制器的上下文轻松调整参数;
  • 代码的可读性和可维护性。

此外,如果feed的增长超出预期,则可以创建一个常量文件,在其中可以通过以下方式将每个控制器及其动作相关联:

namespace Stories
{
    public class ControllersNames {
        public const string AllStories = "AllStories";
        public const string MySubmissions = "MySubmissions";
    }

    public class ActionsNames
    {
        #region AllStories
        public const string AllStories_ReadLater = "ReadLater";
        public const string AllStories_PlanToUse = "PlanToUse";
        #endregion

        #region MySubmissions
        public const string MySubmissions_ReadLater = "ReadLater";
        public const string MySubmissions_PlanToUse = "PlanToUse";
        //same action but with different paramaters below
        public const string MySubmissions_PlanToReUse = "PlanToUse"; 
        public const string MySubmissions_Store = "Store";
        #endregion
    }
}

在您认为的某个地方,您可能会拨打类似于以下内容的电话:

<a ... href="@Url.Action(
      ActionsNames.MySubmissions_PlanToUse,
      ControllersNames.MySubmissions,
      new { page = Model.MySubmissions.IDPage })">

阅读和执行更多操作更加容易...

我会选择第一个选项,因为仅出于过滤文章/内容而采取不同的操作几乎没有意义。

在路由中使用枚举似乎也不是理想的选择。 有意义的字符串更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM