webapi 实现特效路由的自定义约束 大写约束

约束的作用是 只有大写的参数值才能通过

 

一、定义约束

二、加载的时候引入约束

三、在controller 引入约束

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Http.Routing;

namespace WebApi
{
    public class UpperCaseRouteConstraint : IHttpRouteConstraint
    {

        bool IHttpRouteConstraint.Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary<string, object> values, HttpRouteDirection routeDirection)
        {
            // parameterName的意思是约束的参数名称 这里是  invalue
            // values 集合 包含参数名称,比如 invalue 的值。 
            object casevalue;
            if(values.TryGetValue(parameterName, out casevalue))// 这里获取 invalue 的值
            {
                return casevalue.ToString().ToUpper() == casevalue.ToString();
            }
            return false;

        }
    }
}

  

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

namespace WebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            DefaultInlineConstraintResolver constraintResolver = new DefaultInlineConstraintResolver();
            constraintResolver.ConstraintMap.Add("UpperCase", typeof(UpperCaseRouteConstraint));
            config.MapHttpAttributeRoutes(constraintResolver);

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

  

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Web.Http;
using WebApi.Properties;

namespace WebApi.Controllers
{
    public class ResourcesController : ApiController
    {
        [HttpGet]
        [Route("api/constrant/{invalue:UpperCase=TTT}")]
        public string GetValue(string invalue)
        {
            return invalue;
        }
    }
}

  

 

 获得定义一个新的 约束解析类

 

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

namespace WebApi
{
    public class ExtendDefaultInlineConstraintResolver: DefaultInlineConstraintResolver
    {
        public ExtendDefaultInlineConstraintResolver()
        {
            this.ConstraintMap.Add("UpperCase", typeof(UpperCaseRouteConstraint));
        }
    }
}

  

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

namespace WebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            //DefaultInlineConstraintResolver constraintResolver = new DefaultInlineConstraintResolver();
            //constraintResolver.ConstraintMap.Add("UpperCase", typeof(UpperCaseRouteConstraint));
            ExtendDefaultInlineConstraintResolver constraintResolver = new ExtendDefaultInlineConstraintResolver();
            config.MapHttpAttributeRoutes(constraintResolver);

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

  

 

posted @ 2021-10-20 09:50  zq爱生活爱代码  阅读(39)  评论(0编辑  收藏  举报