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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.