ASP MVP 配置不是惯例
ASP MVP Configuration NOT Convention
我了解 ASP MVC 的约定优于配置方法的很多好处。也就是说,我想尝试使用基于配置的方法和路由属性构建一个 ASP 基于 MVC 的站点。
实际上,我希望将所有控制器放在项目的根目录中(不嵌套在 'Controllers' 文件夹下),然后将视图放在旁边(不嵌套在视图文件夹下)。
例如在根文件夹中类似于:
Posts.cs(控制器)- 将具有通过属性映射到路由的方法
Posts.cshtml(查看)
我一直在搜索,令人惊讶的是,我对这个主题的发现很少。
例如,我的根目录中有以下控制器
(more.cs)
public class More : Controller
{
[Route("more")]
public ActionResult Index()
{
return View("~/more.cshtml");
}
}
我在 RouteConfig.cs
中调用它
routes.MapMvcAttributeRoutes();
但是生成资源找不到错误
再一次 - 我不是在寻找为什么我不想这样做......我理解公约的好处......但如果我想(正确或错误)我怎么能做到。
对于那些感兴趣的人...有许多必要的配置...来尝试执行此操作。
- 删除路由命名约定 - 最简单的方法是在控制器上使用属性路由 class:
[RoutePrefix("mypath")]
Public class AnyNameController : Controller{
[Route("prettyUrlName/{parameter}")]
public ActionResult somefunction(string parameter){
///do stuff
}
}
为此,您需要在 Web 应用程序启动时调用以下命令:
RouteTable.Routes.MapMvcAttributeRoutes();
2. 要将任何视图移出 Views 文件夹,您需要将 Views 文件夹中的 Web.config 设置复制到您想要放置 *.cshtml 视图文件的任何文件夹(例如根目录)
</p>
<pre><code> <configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="us.communion.www" />
</namespaces>
</pages>
- 删除“*Controller”命名约定需要创建自定义控制器工厂。关于此还有另一个线程:change controller name convention in ASP.NET MVC
我了解 ASP MVC 的约定优于配置方法的很多好处。也就是说,我想尝试使用基于配置的方法和路由属性构建一个 ASP 基于 MVC 的站点。
实际上,我希望将所有控制器放在项目的根目录中(不嵌套在 'Controllers' 文件夹下),然后将视图放在旁边(不嵌套在视图文件夹下)。
例如在根文件夹中类似于:
Posts.cs(控制器)- 将具有通过属性映射到路由的方法
Posts.cshtml(查看)
我一直在搜索,令人惊讶的是,我对这个主题的发现很少。
例如,我的根目录中有以下控制器 (more.cs)
public class More : Controller
{
[Route("more")]
public ActionResult Index()
{
return View("~/more.cshtml");
}
}
我在 RouteConfig.cs
中调用它routes.MapMvcAttributeRoutes();
但是生成资源找不到错误
再一次 - 我不是在寻找为什么我不想这样做......我理解公约的好处......但如果我想(正确或错误)我怎么能做到。
对于那些感兴趣的人...有许多必要的配置...来尝试执行此操作。
- 删除路由命名约定 - 最简单的方法是在控制器上使用属性路由 class:
[RoutePrefix("mypath")]
Public class AnyNameController : Controller{
[Route("prettyUrlName/{parameter}")]
public ActionResult somefunction(string parameter){
///do stuff
}
}
为此,您需要在 Web 应用程序启动时调用以下命令:
RouteTable.Routes.MapMvcAttributeRoutes();
2. 要将任何视图移出 Views 文件夹,您需要将 Views 文件夹中的 Web.config 设置复制到您想要放置 *.cshtml 视图文件的任何文件夹(例如根目录)
</p>
<pre><code> <configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="us.communion.www" />
</namespaces>
</pages>
- 删除“*Controller”命名约定需要创建自定义控制器工厂。关于此还有另一个线程:change controller name convention in ASP.NET MVC