직장에서 가정에서 일은, 라우팅 MVC를보고 계속, 계속 모든 것을, 아니 말도 안되는을 볼 수 있습니다.
asp.net MVC 라우팅 코어는 코어 라우팅 asp.net의 상단에 내장되어 있습니다. 이 설명하지하여 미들웨어 끝점 구성 라우팅로드 ( DOTNET 코어 MVC (b)는 이미 설명 ). 부하에 다른 방법을 살펴에서 :
app.UseMvc (경로 => { // 지정된 이름과 템플릿 경로 IRouteBuilder에 추가됩니다 함께. routes.MapRoute ( " 기본 " , " {홈} 컨트롤러 / 액션 = {인덱스} = / {} 언급 된 ID 위? " ); });
이런 식으로 그물 코어는 (미들웨어 라우팅 엔드 포인트 부하를 사용하여) 3.0을 사용하라는 메시지가 표시됩니다
우리는 코드에 추가 할 수있는 메시지에 따라 :
ConfigureServices 방법은 추가 :
// 하지 활성화 엔드 포인트 services.AddMvc (옵션 => options.EnableEndpointRouting = 거짓 );
공용 정적 IApplicationBuilder UseMvc ( 이 IApplicationBuilder 앱 액션 <IRouteBuilder> configureRoutes { 경우 (APP == 널 ) { 던져 새로운 경우 ArgumentNullException (nameof (앱)); } 경우 (configureRoutes == 널 ) { 던져 새로운 경우 ArgumentNullException을 (nameof (configureRoutes) ) } // 在调用UseMvc之前验证AddMvc是否已完成 VerifyMvcIsRegistered (APP) VAR의 옵션 = app.ApplicationServices.GetRequiredService <iOptions에 <MvcOptions >> (); 만약(options.Value.EnableEndpointRouting) { var에 메시지 = " 엔드 포인트 않습니다 라우팅되지 않음 지원 'IApplicationBuilder.UseMvc (...)'. 사용에 " + " '거짓 = MvcOptions.EnableEndpointRouting' 'IApplicationBuilder.UseMvc'SET를 내부의 " + " 'ConfigureServices (...). " ; 던져 새로운 새로운 InvalidOperationException이 (메시지); } // 기본 MVC 처리 클래스를 생성 // RouteBuilder 라우터는 필요한 중간 오브젝트 RouterMiddleware의 생성 var에 경로 = 새로운 새로운 RouteBuilder (앱)을 {App.ApplicationServices.GetRequiredService = <MvcRouteHandler> () } // 구성 MVC 경로 콜백 configureRoutes (경로); // CreateAttributeMegaRoute하십시오 IRouter 주로 RouteAttribute 처리에 사용 반환 액션 마크 routes.Routes.Insert를 ( 0 , AttributeRouting.CreateAttributeMegaRoute (app.ApplicationServices)); // 노선 미들웨어 라우팅 필드를 개발하는 데 사용 제동 ApplicationBuilder 반환 app.UseRouter (routes.Build ()); }
공용 인터페이스 IRouteBuilder는 { // 가져 오기 applictionbuilder (미들웨어 위임 응용 프로그램 요청 파이프 라인에 추가) IApplicationBuilder ApplicationBuilder { GET ;} // 가져 라우팅 (코어) IRouter의 DefaultHandler { GET , SET ;} // 구문 분석에 IServiceProvider 경로를 가져옵니다 일련의 서비스 IServiceProvider ServiceProvider { GET ;} // 경로 설정 가져 오기 IList의 <IRouter> 경로 { GET ;} 빌드 () IRouter를; }
// 主要是用来处理RouteAttribute标记的액션, 공공 정적 IRouter CreateAttributeMegaRoute (IServiceProvider 서비스) { 경우 (서비스 == null이 ) { 던져 새로운 경우 ArgumentNullException을 (nameof (서비스)); } 반환 새 (AttributeRoute을 services.GetRequiredService <IActionDescriptorCollectionProvider> (), 서비스, 행동 => { var에 핸들러 = services.GetRequiredService <MvcAttributeRouteHandler> (); handler.Actions =행위; 반환 핸들러; }); }
그것은 다시 방법을 사용하지만 여전히 방법이 매우 분명하지 않다 전체 경로의 흐름 있지만 다음 파이프 라인 전송 프로세스 다음과 같은 경로를 상세하게 우리 것 그래서 우선은 여기에 썼다.
만든 소스를 나타냅니다 재현.