Asp.net 코어 MVC (3 개) UseMvc 라우팅 설정

직장에서 가정에서 일은, 라우팅 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 =행위;
            반환 핸들러; 
        }); 
}

그것은 다시 방법을 사용하지만 여전히 방법이 매우 분명하지 않다 전체 경로의 흐름 있지만 다음 파이프 라인 전송 프로세스 다음과 같은 경로를 상세하게 우리 것 그래서 우선은 여기에 썼다.

 만든 소스를 나타냅니다 재현.
 

 

 

 

추천

출처www.cnblogs.com/xtt321/p/12343934.html