RouteAttribute自定义Action的URL(MVC5新特性之一 MapMvcAttributeRoutes)

1、RouteAttribute、RoutePrefixAttribute概述

  在MVC中,RouteAttribute和RoutePrefixAttribute的命名空间是System.Web.Mvc,区别与Web API的RouteAttribute和RoutePrefixAttribute(它们的命名空间是System.Web.Http)。

RoutePrefixAttribute是只用于类的特性(RouteAttribute可用于类和方法)。比如我们希望是这样的格式:http://localhost:端口/api/customers/1/orders,则应用如下:

[RoutePrefix("api")]
public class OrdersController : ApiController
{
    [Route("customers/{customerId}/orders")]
    [HttpGet]
    public IEnumerable<Order> FindOrdersByCustomer(int customerId)
    {
        return Database.GetOrdersByCustomerId(customerId);
    }
}
//《Web Api通过Route、RoutePrefix等特性设置路由》
// https://www.cnblogs.com/shy1766IT/p/5578807.html 
// (还可以通过"{参数变量名称:约束}"来约束路由中的参数变量,详细可打开该链接)

 

  • 在Web API中启用特性路由,需要在 App_Start 目录的 WebApiConfig 类中调用 System.Web.Http.HttpConfigurationExtensions 的扩展方法 MapHttpAttributeRoutes 进行配置(参与实际项目及https://www.cnblogs.com/ITusk/p/7677001.html):
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            //跨域配置
            config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

            config.Filters.Add((I18nFilterAttribute)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(I18nFilterAttribute)));

			var exceptionFilter = GlobalConfiguration.Configuration.DependencyResolver
                .GetService(typeof(ApiExceptionFilterAttribute)) as ApiExceptionFilterAttribute;
            config.Filters.Add(exceptionFilter);

            // 启用Web API特性路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
  •   默认情况下MVC的特征路由(RouteAttribute)功能是关闭的,需要手动启动,启动方式【MVC中是通过RouteConfig类的routes.MapMvcAttributeRoutes()启用Attribute路由】:
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes(); //启用Attribute路由
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }    

2、RouteAttribute简单例子(MVC中)

        [Route("list")]
        [Route("list/{category}lb")]
        [Route("list/{category}/p{page:int}ye")]
        public void ArticleList(string category, int page = 1)
        {
            var title = string.IsNullOrEmpty(category) ? "所有资讯" : category + "资讯";
            Response.Write(string.Format("分类:{0},页码:{1}<br/>测试路由属性!!!", title, page));
        }

 

  • Route("list/")匹配地址:http://localhost:56123/list

  •  Route("list/{category}lb")匹配地址:http://localhost:56123/list/newslb 

  •  Route("list/{category}/p{page:int}ye")匹配地址:http://localhost:56123/list/entertainment/p50ye

(本文例子参考https://www.cnblogs.com/amywechat/p/5767619.html进行测试并做了修正) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值