asp 区域Areas以及控制器的ApiController路由

asp 区域Areas以及控制器的ApiController路由

第一二步就完成了api路由配置了,第三步完成了区域api路由,第四步是验证。

第一步:Global.asax文件配置
第一:加一条WebApiConfig.Register(GlobalConfiguration.Configuration);注意位置
第二:引入类库Microsoft.AspNet.WebApi.WebHost
第三:在App_Start下新建WebApiConfig类

using ApiRoute.App_Start;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace ApiRoute
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //新增
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}



第二步:WebApiConfig类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;
using System.Web.Http.Dispatcher;

namespace ApiRoute.App_Start
{
    public class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            //删除API默认的XML格式
            config.Formatters.Remove(config.Formatters.XmlFormatter);
            var suffix = typeof(DefaultHttpControllerSelector).GetField("ControllerSuffix", BindingFlags.Static | BindingFlags.Public);
            if (suffix != null) suffix.SetValue(null, "ApiController");
        }
    }
}



第三步:区域配置
第一:新建一个区域命名为Test
第二:在TestAreaRegistration中添加api路由配置,注意修改后面的命名空间,我的是ApiRoute。

using System.Web.Http;
using System.Web.Mvc;
namespace ApiRoute.Areas.Test
{
    public class TestAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Test";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Test_default",
                "Test/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
            //新加,注意namespace ApiRoute
            GlobalConfiguration.Configuration.Routes.MapHttpRoute(
           this.AreaName + "Api",
           "api/" + this.AreaName + "/{controller}/{action}/{id}",
           new { area = this.AreaName, action = RouteParameter.Optional, id = RouteParameter.Optional, namespaceName = new string[] { string.Format("ApiRoute.Areas.{0}.Controllers", this.AreaName) } }
            );
        }
    }
}



第四步:验证(页面ajax请求api)
第一:在Test区域下新建一个控制器Kaku
第二:写api类继承ApiController,这个KakuApiController是在第三步路由的格式
第三:在一个页面请求区域的api和普通控制器的api,这个页面我用的是Home下面的Index

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;

namespace ApiRoute.Areas.Test.Controllers
{
    public class KakuController : Controller
    {
        // GET: Test/Kaku
        public ActionResult Index()
        {
            return View();
        }
    }
    public class KakuApiController : ApiController
    {
        [System.Web.Http.HttpGet]
        public dynamic Get()
        {
            return "I am AreaApi";
        }
    }
}
@{
    ViewBag.Title = "Home Page";
}
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<button onclick="Api()">api</button>
<button onclick="AreaApi()">AreaApi</button>
<script>
    function Api() {
        $.ajax({
            url: "/api/Home/Get",
            success: function (rs) {
                alert(rs);
            }
        });
    }
    function AreaApi() {
        $.ajax({
            url: "/api/Test/Kaku/Get",
            success: function (rs) {
                alert(rs);
            }
        });
    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值