ASP MVP配置不公约

时间:2015-04-01 22:52:49

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 attributerouting

我理解公约的许多好处而不是ASP MVC的配置方法。也就是说,我想尝试使用基于配置的方法和路由属性来构建基于ASP MVC的站点。

实际上,我希望将所有控制器放在项目的根目录中(不要嵌套在'控制器'文件夹下)和旁边的视图(没有嵌套在views文件夹下面)

e.g。在根文件夹中的内容如下:

  • Posts.cs(Controller) - 会有通过属性映射到路径的方法

  • Posts.cshtml(查看)

我一直在寻找并且惊讶地发现这个话题很少。

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

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

我在RouteConfig.cs中调用它

routes.MapMvcAttributeRoutes();

但生成资源无法找到错误

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

1 个答案:

答案 0 :(得分:0)

对于那些感兴趣的人......有许多必要的配置......试图这样做。

  1. 删除路由命名约定 - 最简单的方法是在控制器类上使用属性路由:
  2. 
    [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视图文件的whereever文件夹(例如root)

       <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>
    

    <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>

    1. 删除了&#39; *控制器&#39;命名约定需要创建自定义控制器工厂。还有另一个关于此的帖子:change controller name convention in ASP.NET MVC