新建项目 Main:

添加一个MVC5控制器并添加index视图:(HomeController)

Views/Home/Index.cshtml内容:

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<h1>Main Inde 页面</h1>
</div>
</body>
</html>

添加一个默认API控制器

内容:

public class DefaultController : ApiController
{
[HttpGet]
public object get()
{
return "main API";
}
}

给项目添加区域(Admin):

会自动添加一个Areas文件夹,文件夹下子文件名和区域名相同

给Admin添加一个MVC5控制器和一个API控制器

视图代码:

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<h1>Admin Page</h1>
</div>
</body>
</html>

API代码:

public class AdminAPIController : ApiController
{
[HttpGet]
public object get()
{
return "Admin API";
}
}

运行项目:

区域页面正常显示!区域的api无法访问:

修改住项目的api路由:

代码:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务 // Web API 路由
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 添加区域API路由转播
config.Routes.MapHttpRoute(
name: "Admin_DefaultApi",
routeTemplate: "Admin/api/{controller}/{id}",
defaults: new { area = "Admin", id = RouteParameter.Optional }
);
}
}

routetemplate:区域api的路由

area:区域名称

项目Global中把API路由配置放到第一行,(放下面会报404错误)

运行项目,正常访问:

接下来新建一个mvc子项目,并添加mvc控制器和api控制器:

添加一个区域注册类:

public class SecondAreaRegistration : AreaRegistration
{
//区域名称
public override string AreaName
{
get
{
return "Second";
}
}
//注册区域路由
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Second_default",
"Second/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}

修改API路由,添加second的路由:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务 // Web API 路由
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); // 添加AdminAPI路由转播
            config.Routes.MapHttpRoute(
name: "Admin_DefaultApi",
routeTemplate: "Admin/api/{controller}/{id}",
defaults: new { area = "Admin", id = RouteParameter.Optional }
); // 添加SecondAPI路由转播
            config.Routes.MapHttpRoute(
name: "Second_DefaultApi",
routeTemplate: "Second/api/{controller}/{id}",
defaults: new { area = "Second", id = RouteParameter.Optional }
); }
}

发布项目:

在Main发布后的文件夹中新建一个Second的区域文件夹:

复制Second项目发布的Views文件夹到Main/Areas/Second

如果有类库或者js脚本的话,复制到Main根目录中响应的文件夹下

复制Second/bin到Main/bin

配置IIS:

权限不足的话复制到非系统盘:

运行结果:

源代码下载:https://github.com/GarsonZhang/MVCAreaDemo

MVC区域使用的更多相关文章

  1. MVC区域 视图必须派生自 WebViewPage 或 WebViewPage<TModel>

    http://blog.csdn.net/iack_ji/article/details/16965885 今天在学习 mvc区域时,将区域控制器类 外迁到其他的程序集的练习中出现了"视图必 ...

  2. MVC区域小结

    MVC区域小结 MVC区域小结 MVC3一直在学习,项目中有的时候也会用到,博客园也一直逛,想写点什么东西,可惜我这个人平时都很懒,理论层面的东西自己写不来,还是来点实际的简单入门的博客,对自己总结能 ...

  3. 将子域名请求路由到MVC区域

    写了个扩展,分享给需要的朋友. 0x01 使用方法 在mvc区域中的{xxxx}AreaRegistration.cs文件中,如ProjectsAreaRegistration.cs <pre& ...

  4. MVC 区域路

    VS2013和VS2015中MVC 区域路由匹配顺序相反   创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创 ...

  5. mvc路由,mvc区域

    1.路由在进行匹配时,会默认匹配第一个路由信息 2.路由规则的{control}和{action}时不能改变的 3.路由规则可以中间字符可以随便定义,但是{control}和{action}必须使用一 ...

  6. MVC 区域功能

    因为MVC项目是要求都放在固定的文件夹,所以,当项目大的时候,会很不方便管理,所以微软引入的区域的功能 使用方法: 在项目上右击--添加--区域 就会出现Areas的文件夹,里面就是子MVC 渲染: ...

  7. MVC 区域模块

    mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...

  8. MVC教程:MVC区域路由

    一.区域路由 为了管理网站中大量的文件,在ASP.NET MVC 2.0版本中引入了一个新概念:区域(Area). 有了区域以后,可以让我们的项目不至于太复杂而导致管理混乱.每个模块的页面都放入相应的 ...

  9. VS2013和VS2015中MVC 区域路由匹配顺序相反

    创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创建一个HomeController和Index视图.修改Rou ...

随机推荐

  1. BizTalk开发系列(十一) 在Orchestration中执行Pipeline

    由于开发需要有时要在流程中执行Pipeline.比如从DB的某个字段中取消息的字符串并在流程中构造消息.该需要通过pipeline进行升级 属性字段,验证消息等处理.BizTalk架构已经开放了此接口 ...

  2. VS2012编译VS2010版本的过程报错解决

    C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32C:\Program Files\MSBuild\Microsoft C:\Pro ...

  3. mysql单表多timestamp的current_timestamp设置问题

    一个表中出现多个timestamp并设置其中一个为current_timestamp的时候经常会遇到 1293 - Incorrect table definition; there can be o ...

  4. Android WebApp开发使用Genymotion连接Fiddler2/Charles代理调试

    1.       目的 在模拟器的浏览器或app hybrid开发中遇到chrome调试代码为线上代码或者混淆代码时,可以利用fiddler/charles为genymotion配置代理, 可以方便的 ...

  5. Android RSA加密解密

    概述 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困 难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数 ...

  6. redis 自启动

    第一步: 在/etc/init.d/目录下建立一个名字为 redis 的启动脚本 cd /etc/init.d touch redis 然后在这个脚本中添加如下脚本  <注意修改自己的PIDFI ...

  7. PHP:array_chunk()数组分割

    array_chunk(); 作用:把一个数组分割为新的数组块 用法: 实例:把数组分割为带有两个元素的数组块 $cars=array("Volvo","BMW" ...

  8. c#中浅拷贝和深拷贝的理解

    c#中拷贝有浅拷贝和深拷贝之分. 例如对象A,其中有值类型字段和引用类型字段: 1.浅拷贝: 对于值类型字段,直接逐位复制到新拷贝的副本对象中,修改副本的字段的值,不会影响源对象中字段的值: 对于引用 ...

  9. [PCL]FPFH描述子

    fpfh_est.setSearchSurface(data); 如果没有设置SearchSurface,使用input数据集作为查找的表面 // If no search surface has b ...

  10. LATEX论文排版学习资源汇总

    一.国内出版的LaTeX书籍 不管是ctex还是chinatex论坛,很多TeX前辈和使用者都给大家提供了很多咨询帮助,同时,也分享了很多很多学习上的方法与技巧.一般都推荐入门的用户先阅读一本入门书, ...