MVC区域使用
新建项目 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区域使用的更多相关文章
- MVC区域 视图必须派生自 WebViewPage 或 WebViewPage<TModel>
http://blog.csdn.net/iack_ji/article/details/16965885 今天在学习 mvc区域时,将区域控制器类 外迁到其他的程序集的练习中出现了"视图必 ...
- MVC区域小结
MVC区域小结 MVC区域小结 MVC3一直在学习,项目中有的时候也会用到,博客园也一直逛,想写点什么东西,可惜我这个人平时都很懒,理论层面的东西自己写不来,还是来点实际的简单入门的博客,对自己总结能 ...
- 将子域名请求路由到MVC区域
写了个扩展,分享给需要的朋友. 0x01 使用方法 在mvc区域中的{xxxx}AreaRegistration.cs文件中,如ProjectsAreaRegistration.cs <pre& ...
- MVC 区域路
VS2013和VS2015中MVC 区域路由匹配顺序相反 创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创 ...
- mvc路由,mvc区域
1.路由在进行匹配时,会默认匹配第一个路由信息 2.路由规则的{control}和{action}时不能改变的 3.路由规则可以中间字符可以随便定义,但是{control}和{action}必须使用一 ...
- MVC 区域功能
因为MVC项目是要求都放在固定的文件夹,所以,当项目大的时候,会很不方便管理,所以微软引入的区域的功能 使用方法: 在项目上右击--添加--区域 就会出现Areas的文件夹,里面就是子MVC 渲染: ...
- MVC 区域模块
mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...
- MVC教程:MVC区域路由
一.区域路由 为了管理网站中大量的文件,在ASP.NET MVC 2.0版本中引入了一个新概念:区域(Area). 有了区域以后,可以让我们的项目不至于太复杂而导致管理混乱.每个模块的页面都放入相应的 ...
- VS2013和VS2015中MVC 区域路由匹配顺序相反
创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创建一个HomeController和Index视图.修改Rou ...
随机推荐
- 【iCore3 双核心板_FPGA】实验二十四:Niosii——SDRAM读写实验
实验指导书及代码包下载: http://pan.baidu.com/s/1c2xAJT2 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 20145221高其&20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计
20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 l ...
- NEC学习 ---- 模块 - tab[含标题]
简要介绍, 默认居左, Tab不定宽, “标题”和“更多”可删, 扩展类可以自由组合, 依赖于reset.css(之前的模块以及布局都依赖这个css) 那么这个效果是怎么实现的呢? CSS代码: . ...
- python随机服务器的双线出口ip发送邮件
#-*- coding:utf-8 -*-import smtplibimport sysimport random import socketfrom email.mime.text import ...
- cocos2d-x mac os启动 android helloworld
工具环境: mac os, jdk, Android Studio, cocos2d-x-3.13.1, ant, android-ndk. 解压coco2d-x后,根目录下有 setup.py, 命 ...
- KVC浅析和实例
KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一 ...
- 《Linux内核分析》第六周 读书笔记
<Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...
- oracle 判断字符串是否日期格式
select case when to_char(TO_DATE(NVL('2015- 8', 'a'), 'yyyy-mm'),'yyyy-mm')='2015- 8' then 1 else 0 ...
- C#基础知识大杂烩
这样是调用父类中第二个有参的构造函数,如果去掉Base默认调用无参构造函数 注意执行顺序是:先调用父类的构造函数,然后再执行子类自己的构造函数. 父类: class Person { public P ...
- raw socket
一个很newbee的例子,可惜还得改 import sys import time import socket import struct import random def SendPacketDa ...