ASP MVP 配置不是惯例

ASP MVP Configuration NOT Convention

我了解 ASP MVC 的约定优于配置方法的很多好处。也就是说,我想尝试使用基于配置的方法和路由属性构建一个 ASP 基于 MVC 的站点。

实际上,我希望将所有控制器放在项目的根目录中(不嵌套在 'Controllers' 文件夹下),然后将视图放在旁边(不嵌套在视图文件夹下)。

例如在根文件夹中类似于:

我一直在搜索,令人惊讶的是,我对这个主题的发现很少。

例如,我的根目录中有以下控制器 (more.cs)

public class More : Controller
{
    [Route("more")]
    public ActionResult Index()
    {
        return View("~/more.cshtml");
    }
}

我在 RouteConfig.cs

中调用它
routes.MapMvcAttributeRoutes();

但是生成资源找不到错误

再一次 - 我不是在寻找为什么我不想这样做......我理解公约的好处......但如果我想(正确或错误)我怎么能做到。

对于那些感兴趣的人...有许多必要的配置...来尝试执行此操作。

  1. 删除路由命名约定 - 最简单的方法是在控制器上使用属性路由 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>

  1. 删除“*Controller”命名约定需要创建自定义控制器工厂。关于此还有另一个线程:change controller name convention in ASP.NET MVC