码迷,mamicode.com
首页 > Web开发 > 详细

MVC区域使用

时间:2016-08-14 16:12:26      阅读:519      评论:0      收藏:0      [点我收藏+]

标签:

新建项目 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区域使用

标签:

原文地址:http://www.cnblogs.com/GarsonZhang/p/5770321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!