asp.net core webapi 프로젝트 의 전체 경로 설정 방법 예제

머리말
프로젝트 를 개발 하 는 과정 에서 저 는 contrller 를 새로 만 들 었 습 니 다.vs 는 contrller 헤드 에 접 두 사 를 직접 추가 하 는 것 을 발 견 했 습 니 다.예 를 들 어[Route("api/[controller]"),즉 인터페이스 에 접근 할 때 변 합 니 다.http://localhost:8000/api/values그러나 컨트롤 러 가 여러 개 있 거나 버 전 을 교체 하려 고 할 때 우 리 는 고통스러운 순간 이 찾 아 왔 다 는 것 을 알 게 될 것 이다.하나하나 수정 해 야 한다.
이 럴 때 전체 설정 접 두 사 를 사용 할 수 있다 면 정말 복지 입 니 다.한 곳 을 수정 하면 됩 니 다.이 목적 을 달성 하기 위해 서 우리 가 운용 해 보 자.
배치
0.설정 하기 전에 인터페이스의 접 두 사 를 살 펴 봅 시다.도 를 세 워 증거 로 삼다. 

swagger 로 열기

1.우리 가 필요 로 하 는 것 은 IApplicationModelConvention  에 자리잡다,... Microsoft.AspNetCore.Mvc.ApplicationModels 명령 공간 아래.

MVC 프레임 워 크 는 약 속 된 것 이 있 는데 이 인터페이스 주 는 바로 MVC 가 약속 한 것 을 정의 하 는 데 쓰 인 다.저 희 는 Application Model 을 통 해서...  약속 을 수정 하거나 추가 할 수 있 으 며,뮤 직 비디오 프레임 자체 가 시작 할 때 이 인 터 페 이 스 를 주입 하여 우리 가 사용 할 수 있 도록 합 니 다.
그래도 이 어 플 리 케 이 션 모델 을 살 펴 봐 야 겠 어 요.  대상 안에 우리 가 사용 할 수 있 는 곳 이 있 습 니까?우 리 는 계속 깊이 들 어 갑 니 다.

이것 이 매우 시원 한 지,우 리 는 각 속성의 설명 을 볼 수 있다.
ApiExplorer 모델:설명 정보,그룹 정보,가시 성 등 을 포함한다.
Controller Model:주로 Comtroller 의 기본 약속 과 관련 된 것 입 니 다.이 안에 물건 이 많 습 니 다.컨트롤 러 이름,경로 값,Actions 등 이 있 습 니 다.저희 가 이 어 갈 설정 도 여기 서 펼 쳐 집 니 다.
IFilterMetadata:빈 인터페이스,주로 태그 역할 을 합 니 다.
2.설정
STEP 1:IApplicationModelConvention 를 실현 하기 위해 클래스 를 정의 합 니 다.  인터페이스

/// <summary>
  ///         
  /// </summary>
  public class RouteConvention : IApplicationModelConvention
  {
    /// <summary>
    ///           
    /// </summary>
    private readonly AttributeRouteModel _centralPrefix;
    /// <summary>
    ///             
    /// </summary>
    /// <param name="routeTemplateProvider"></param>
    public RouteConvention(IRouteTemplateProvider routeTemplateProvider)
    {
      _centralPrefix = new AttributeRouteModel(routeTemplateProvider);
    }

    //   Apply  
    public void Apply(ApplicationModel application)
    {
      //      Controller
      foreach (var controller in application.Controllers)
      {
        // 1、      RouteAttribute   Controller
         //       ,               ,                  。

        var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList();
        if (matchedSelectors.Any())
        {
          foreach (var selectorModel in matchedSelectors)
          {
            //                    
            selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_centralPrefix,
              selectorModel.AttributeRouteModel);
          }
        }

        //2、      RouteAttribute   Controller
        var unmatchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
        if (unmatchedSelectors.Any())
        {
          foreach (var selectorModel in unmatchedSelectors)
          {
            //          
            selectorModel.AttributeRouteModel = _centralPrefix;
          }
        }
      }
    }
  }
이 코드 는 주의해 야 합 니 다.위의 코드 는 두 부분 으로 나 뉘 는데 일 부 는 컨트롤 러 에 경로 설정 이 있 고 일 부 는 경로 설정 이 없습니다.따라서 구체 적 인 상황 에 따라 선택 하여 사용 해 야 한다.
두 번 째 단계:위 에 추가 한 후에 우 리 는 하나의 종 류 를 정의 하여 우리 의 길 을 삽입 합 시다.
MvcOptions Extensions.cs 를 정의 합 니 다.이 방법 은 주로 MVCoptions 클래스 를 확장 합 니 다.

public static class MvcOptionsExtensions
  {
    /// <summary>
    ///     
    /// </summary>
    /// <param name="opts"></param>
    /// <param name="routeAttribute"></param>
    public static void UseCentralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
    {
      //           IApplicationModelConvention RouteConvention
      opts.Conventions.Insert(0, new RouteConvention(routeAttribute));
    }
  }
설명:route Attribute 가 정 한 접두사 내용 입 니 다.
세 번 째 단계:startup.cs 에서 Configure Services 방법 으로 설정 정 보 를 추가 합 니 다.

#region       
      //          (             )
      services.AddMvc(opt =>
      {
        opt.UseCentralRoutePrefix(new RouteAttribute("lg/v1/[action]"));
        //opt.UseCentralRoutePrefix(new RouteAttribute("api/[controller]/[action]"));

      });
      #endregion
설명:위의 괄호 는 이쪽 에서 유효 하 다.그 내용 은 사용자 정의 할 수 있다.
STEP 4:실행
1.원래 컨트롤 러 경로 접두사 유지

2.원래 의 경로 접 두 사 를 제거 합 니 다.

3.총화
이로써 전역 경로 설정 접 두 사 를 잘 실현 하 였 습 니 다.신나 게 놀 수 있 겠 다.
github 코드 주소:github
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기