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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3.0 和 ASP.NET Core WebAPI 都支持动态路由,实现起来也比较简单。 首先,在 ASP.NET Core WebAPI 中,我们需要在 Startup.cs 中配置路由。可以使用以下代码: ``` app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}"); }); ``` 这个配置会将请求转发到对应的控制器和方法中。其中,{controller} 和 {action} 表示控制器和方法,{id?} 表示可选参数。 接着,在 Vue 3.0 中,我们可以使用 vue-router 实现动态路由。可以使用以下代码: ``` const router = createRouter({ history: createWebHistory(), routes: [ { path: '/:controller/:action/:id?', name: 'dynamic', component: DynamicComponent } ] }) ``` 这个配置会将请求转发到 DynamicComponent 组件中。其中,:controller、:action 和 :id? 表示控制器、方法和可选参数。 最后,我们可以在 DynamicComponent 组件中调用 ASP.NET Core WebAPI 中的动态路由。可以使用以下代码: ``` axios.get(`/api/${this.$route.params.controller}/${this.$route.params.action}/${this.$route.params.id}`) .then(response => { // 处理响应 }) .catch(error => { // 处理错误 }) ``` 这个代码会发送请求到对应的控制器和方法中,其中,this.$route.params.controller、this.$route.params.action 和 this.$route.params.id 分别对应控制器、方法和参数。 以上就是 Vue 3.0 和 ASP.NET Core WebAPI 实现动态路由的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值