新建项目 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. js去除中间空格

    / 功能: 1)去除字符串前后所有空格 // 2)去除字符串中所有空格(包括中间空格,需要设置第2个参数为:g) function Trim(str,is_global) { var result;  ...

  2. Android课程---关于ListView列表视图的学习

    activity_ui3.xml <?xml version="1.0" encoding="utf-8"?> <ListView xmlns ...

  3. SQL Server 存储过程(转)

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  4. springmvc Failed to load resource: the server responded with a status of 404 (Not Found)

    jsp页面导入css.js提示上述问题. Spring对静态资源的请求做专门处理 <!-- 对静态资源的请求 --><mvc:resources location="/js ...

  5. linux 中的斜杠 ‘/’ ‘\’ 的区别 - 服务器是LINUX的注意了, 和windows 的不一样哦!

    ubuntu@ubuntu:~$ vi \> ubuntu@ubuntu:~$ 稍微思考了一下就明白了,不是打不开,问题出在这个文件名" \ "上面. 反斜线符号" ...

  6. [转载] Windows + IIS + PHP 配置

    资源下载: 下载windwos版本的PHP:http://windows.php.net/download/ (我下载的是PHP5.4.9_VC9 x86 Non Thread Safe,下载地址:h ...

  7. eclipse工程加入jquery.min.js报错:missing semicolon

    1,注释修改项目目录下的.project文件 <?xml version="1.0" encoding="UTF-8"?> <projectD ...

  8. 初探XML

    1.XML是什么? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签 ...

  9. 【Composer】实战操作二:自己创建composer包并提交

    大纲 创建自己的composer库 提交到指定平台 测试安装自己的库 设置composer平台自动更新 如何方便测试自己开发的库 开始动手 创建自己的composer库 个人博客后台有一部分是关于统计 ...

  10. C++ 扫描文件夹下所有文件

    void GetFilesFromDirectory(std::vector<std::string> &files, const char *directoryPath) { s ...