.NET 핵심 개발 실제 전투 (제 25과 : 라우팅 및 엔드 포인트 : 당신의 웹 API를 계획하는 방법) - 연구 노트 (A)를

25 | 라우팅 및 엔드 포인트 : 잘 계획하는 방법에 웹 API

존재하고있다 ASP.NET MVC 프레임 워크 라우팅 시스템, ASP.NET는 코어 프레임 워크 내부에 개선 된

라우팅 시스템의 중심 역할은 URL과 컨트롤러의 응용 프로그램 사이의 매핑 대응을 말한다

이 매핑 관계는 실제로 두 가지 효과가 있습니다 :

도 1은, 상기 URL은 해당 작용 컨트롤러에 대응하는 매핑 된

2 컨트롤러와 액션 이름에 따라하는 URL을 생성합니다

.NET 코어 라우팅 등록의 두 가지 방법을 제공합니다 :

1, 라우팅 템플릿 방법

2, RouteAttribute 방법

현장에 적용된 두 가지 방법 모두 동일하지 않습니다

전통적인 방법 전에 길을 템플릿 라우팅, 그것은 페이지 웹 MVC 구성으로 사용할 수 있습니다

이제, 웹 API의 정의는 그것을 할 RouteAttribute에게 방법을 사용할 때 더 전에 건축의 분리의 종료 후 사용

라우팅 정의 된 과정, 경로 등록의 중간에,이, 중요한 기능은 라우팅 제약입니다 경로와 일치하는 방법입니다

간단한 몇 가지 제약 조건이 있습니다 :

1 형 제약

(2) 제약의 범위

3, 정규 표현식

4, 필수 여부

5, 사용자 정의 IRouteConstraint

또한 라우팅 키 시스템은 역 경로의 URL 주소를 생성 된 정보를 기반으로, 두 개의 클래스를 제공합니다

1 LinkGenerator

2, IUrlHelper

MVC와 IUrlHelper는 MVCHelper의 내부처럼 프레임 워크

그리고 LinkGenerator가 링크가 새로운 객체를 생성하기 위해 제공되며, 이는 임의의 위치에서 객체 용기 내부로부터 수득하고 필요한 URL 주소를 생성 할 수있다

다음 코드를 살펴

소스 링크 :
https://github.com/witskeeper/geektime/tree/master/samples/RoutingDemo

그룹 자신감 코드를 등록하려면 여기, 프레젠테이션을 용이하게하기 위해, 웹 API 출력은 자신감의 시각적 인터페이스를 통해 나올 것

ASP.NET 코어에 대응 자신감 패킷 등장

Swashbuckle.AspNetCore

자신감에 삽입 된 코드 문서 XML 문서

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    c.IncludeXmlComments(xmlPath);
});

자신감 미들웨어 내부에 등록

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

이 방법은 인터페이스에 자신감 인터페이스를보고, 우리의 API가 정의 탐색 할 수 있습니다

경로의 정의에 이어 OrderController

namespace RoutingDemo.Controllers
{
    [Route("api/[controller]/[action]")]// RouteAttribute 的方式
    [ApiController]
    public class OrderController : ControllerBase
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">必须可以转为long</param>
        /// <returns></returns>
        [HttpGet("{id:MyRouteConstraint}")]// 这里使用了自定义的约束
        public bool OrderExist(object id)
        {
            return true;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">最大20</param>
        /// <returns></returns>
        [HttpGet("{id:max(20)}")]// 这里使用了 Max 的约束
        public bool Max(long id)
        {
            return true;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="ss">必填</param>
        /// <returns></returns>
        [HttpGet("{name:required}")]// 必填约束
        public bool Reque(string name)
        {
            return true;
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="number">以三个数字开始</param>
        /// <returns></returns>
        [HttpGet("{number:regex(^\\d{{3}}$)}")]// 正则表达式约束
        public bool Number(string number)
        {
            return true;
        }
    }
}

위의 사용 사용자 정의 제약 MyRouteConstraint

namespace RoutingDemo.Constraints
{
    public class MyRouteConstraint : IRouteConstraint
    {
        public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (RouteDirection.IncomingRequest == routeDirection)
            {
                var v = values[routeKey];
                if (long.TryParse(v.ToString(), out var value))
                {
                    return true;
                }
            }
            return false;
        }
    }
}

등록 MyRouteConstraint

services.AddRouting(options =>
{
    options.ConstraintMap.Add("MyRouteConstraint", typeof(MyRouteConstraint));
});

이 발효 전에 필요 미들웨어 등록 UseEndpoints의 MapControllers의 사용 UseEndpoints 위치를 주입

app.UseEndpoints(endpoints =>
{
    // 使用 RouteAttribute
    endpoints.MapControllers();
});

이 주입 경로 들어오는 OrderController 같은 방법으로

프로그램을 시작, 다섯 인터페이스의 전체를 볼 수 있습니다

첫 번째 인터페이스는 사용자 정의이다 바인드 우리는 클릭, 달성 입력 매개 변수 후에 그것을 밖으로 시도

(20)의 제 2 계면 제약 최대

5, 실행을 입력

이 응답 코드가 200 인 것을 알 수있다

(25)를 입력, 실행

당신은 응답 코드 (404)입니다 볼 수 있습니다, 그것은 경로를 일치에 실패 상기

상기 인터페이스는, NULL 값을 입력하는 방법은, 전단의 인증이 없기 때문에 세번째 파라미터가 필요

네 번째 인터페이스는 일반 식 라인 세 자리, 입력 (234), 응답 코드 (200)로 시작

크리에이티브 커먼즈 라이센스

이 작품은 비영리 - - 동일 조건 변경 허락 4.0 국제 라이센스 계약 크리에이티브 커먼즈 저작자 표시 라이선스합니다.

무단 전재, 사용, 재 게시에 오신 것을 환영합니다,하지만 (링크가 포함 : http://www.cnblogs.com/MingsonZheng/)를 청 Ziming에 의해 서명 된 문서를 유지하기 위해 반드시 상업적인 목적으로 사용할 수 없다, 용지 사용권 변경에 따라 같은 일을 게시해야 .

당신은 질문이있는 경우에는, 저에게 연락 주시기 바랍니다 ([email protected]).

추천

출처www.cnblogs.com/MingsonZheng/p/12508156.html