gpt4 book ai didi

c# - 更改在Razor MVC中创建区域的方式的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:53 25 4
gpt4 key购买 nike

我正在过渡到在项目中使用Areas,每次创建一个新项目时,我都必须更改一些内容以使其适合我希望工作的方式。更改涉及:


删除创建的文件夹之一
稍微修改web.config文件
添加一个或两个具有默认值的新文件
略微修改AreaRegistration文件


我宁愿不必在每次创建新区域时都做同样的事情,因为我担心公约会被遗忘并且会变得混乱。有没有办法修改“新建”>“区域”的默认值?还是有可能制作一个新文件来执行我想要的文件?

最佳答案

我正在过渡到在项目中使用Areas


我已经做了几个月类似的事情,但是从一个旧的WebForms项目开始,通过VS 2013的Add -> New Scaffolded Item...功能添加MVC组件,以便在服务器端利用MVC的结构和路由。我还一直在服务器端合并WebAPI和SignalR。我绝对仍然是一个初学者,但是在类似的过程中可能会更进一步,这里是我关于您要实现的目标的一些想法和问题:




  
  删除创建的文件夹之一
  稍微修改web.config文件
  添加一个或两个具有默认值的新文件
  


您正在开发什么环境?例如,如果您使用VS 2013的脚手架,则很可能可以修改T4模板以防止或重定向文件夹,类等的创建。 Here是解决您可能在其中找到那些模板的文章,而here只是T4众多介绍中的一个。计算机上模板的路径将根据VS版本而有所不同。通过修改或创建新模板,您应该能够相对容易地完成上述所有三个方面。如果您在这样的环境中工作,我将尝试详细说明如何修改现成的模板(可能已经有很多文章可供您参考,尽管它们可以做得更好)。




  
  略微修改AreaRegistration文件
  


如果您正在使用MVC 5或更高版本,则建议使用属性路由。在API范式(从ApiController而不是Controller继承)中使用时,这似乎更标准,但是我发现将其扩展到传统MVC控制器非常有用。

假设使用MVC 5,我建议您修改AppStart\RouteConfig.csRegisterRoutes()方法,以启用属性路由,然后添加一个包罗万象的路由,例如:

routes.MapMvcAttributeRoutes();

routes.MapRoute(
"NotFound",
"{*url}",
new {
controller = "Error",
action = "Index"
});


到那时,我将删除xAreaRegistration.cs文件,并从 RegisterAllAreas()中删除​​对 Global.asax的调用,但是您不必走太远。然后,根据需要使用属性来装饰控制器的类(无论它们位于何处)及其方法。使用属性路由,我已经摆脱了传统的MVC约定。我仍然可以依靠他们,但是我可以将控制器放置在项目中的任何位置,并轻松定义其动作的路线。

话虽这么说,您可能应该遵循一些类似路线组的组织标准,以便随着项目的发展,您不会发现自己浪费大量时间来寻找与某些路线组匹配的所有控制器/动作。



这是一个简单的示例,说明了它实际上是如何从URI转换为方法调用的:

如果我在操作 ctl中使用控制器 act,则在逻辑上在区域 ar中,将使用属性修饰将URI作为 http://localhost/ar/ctl/a/1路由到 MyControllerNameDoesNotMatter.Index(1),如下所示:

[RouteArea("ar")]
[RoutePrefix("ctl")]
public class MyControllerNameDoesNotMatter : Controller {
...
[Route("a/{optionalParamDefaultsToNegativeOne=-1}")]
public ActionResult Index(int optionalParamDefaultsToNegativeOne) {
...
}
}


这种查看Area的方式比物理方式更具逻辑性,因为 MyControllerNameDoesNotMatter.cs文件不必位于 Area\ar\Controllers文件夹中。自从采用此方法以来,我实际上已经不再使用Area脚手架了,除了在非常高的层次上布置应用程序模块外,请考虑可以作为独立SPA的子应用程序。

我试图使“ catch-all”路由属性成为基础,并将其从 RouteConfig.cs删除,但是我无法成功完成此操作。问题是路由优先级。它可以很好地处理无效路由。但是对于有效路由,多条(2)路由最终被匹配,因为两条属性路由具有相同的优先级。而在 RouteConfig.cs中定义的包罗万象的情况下,在注册所有属性路由之后,属性路由优先。我发现了尝试解决此问题的混合答案。在某些时候,似乎 Number属性的参数是 OrderRoute,但是我对此并不走运。这似乎是一个未解决的问题。 Just one of many SO questions,尚未回答。

编辑以考虑mvc4标签

发布前我没有看到mvc4标签。有可用的nuget软件包可以实现许多相同的功能,例如MVC早期版本的 scaffoldingattribute routing

关于c# - 更改在Razor MVC中创建区域的方式的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com