ASP.NET Core 2.0 초기 매개 변 수 를 가 진 미들웨어 문제 및 해결 방법

문제.
어떻게 ASP.NET Core 2.0 에서 미들웨어 에 초기 인 자 를 전달 합 니까?
답안
빈 항목 에서 중간 에 필요 한 인 자 를 저장 하기 위해 POCO(Plain Old CLR Object)를 만 듭 니 다.

public class GreetingOptions
{
  public string GreetAt { get; set; }
  public string GreetTo { get; set; }
}
미들웨어 추가:

public class GreetingMiddleware
{
  private readonly RequestDelegate _next;
  private readonly GreetingOptions _options;
  public GreetingMiddleware(RequestDelegate next, GreetingOptions options)
  {
    _next = next;
    _options = options;
  }
  public async Task Invoke(HttpContext context)
  {
    var message = $"Good {_options.GreetAt} {_options.GreetTo}";
    await context.Response.WriteAsync(message);
  }
}
답 1:실례 유형
미들웨어 를 설정 하기 위해 확장 방법 을 추가 합 니 다:

public static IApplicationBuilder UseGreetingMiddleware(this IApplicationBuilder app, GreetingOptions options)
{
  return app.UseMiddleware<GreetingMiddleware>(options);
}
중간 부품 사용 하기:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseGreetingMiddleware(new GreetingOptions {
    GreetAt = "Morning",
    GreetTo = "Tahir"
  });
}
정 답 2:함수 유형
미들웨어 를 설정 하기 위해 확장 방법 을 추가 합 니 다:

public static IApplicationBuilder UseGreetingMiddlewareAction(this IApplicationBuilder app, Action<GreetingOptions> optionsAction)
{
  var options = new GreetingOptions();
  optionsAction(options);

  return app.UseMiddleware<GreetingMiddleware>(options);
}
중간 부품 사용 하기:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseGreetingMiddlewareAction(options =>
  {
    options.GreetAt = "Morning";
    options.GreetTo = "Tahir";
  });
}
상술 한 두 가지 방법 은 결과 가 일치한다.
실행,이 때 페이지 표시:

토론 하 다.
이전에 우 리 는 단독 클래스 에서 중간 부품 을 정의 하고 확장 방법 을 사용 하여 요청 파이프 에 추가 하 는 것 이 가장 좋 은 실천 이 라 고 토론 한 적 이 있다.우 리 는 중간물 에 인 자 를 전달 해 야 할 수도 있 습 니 다.ASP.NET 코어 소스 코드 와 다른 온라인 예제 에 대한 학습 을 통 해 저 는 상기 두 가지 모델 을 정리 해 냈 습 니 다.
상술 한 두 가지 해결 방법 은 모두 매우 직관 적 이다.우 리 는 파 라 메 터 를 하나의 POCO 클래스 에 밀봉 한 다음 확장 방법 을 만들어 다음 파 라 메 터 를 받 아들 입 니 다.
1.POCO 실례
2.호출 할 함수(함수 에 POCO 설정)
주:POCO 인 스 턴 스 는 구조 함 수 를 통 해 미들웨어 로 전 달 됩 니 다.UseMiddleware()방법 은 가 변 매개 변수 params object[]를 수신 하고 이 매개 변 수 를 미들웨어 구조 함수 에 전달 합 니 다.
서비스 설정
이 모드 들 은 서비스 용기 에 서비스 인 스 턴 스 를 추가 하 는 데 도 사용 할 수 있다.설명 하기 편리 하도록 우 리 는 먼저 서 비 스 를 추가 합 니 다.

public interface IMessageService
{  string FormatMessage(string message);
}
public class MessageService : IMessageService
{
  private readonly GreetingOptions _options;
  public MessageService(GreetingOptions options)
  {
    _options = options;
  }
  public string FormatMessage(string message)
  {
    return $"Good {_options.GreetAt} {_options.GreetTo} - {message}";
  }
}

서 비 스 를 설정 하기 위해 다음 확장 방법 을 추가 합 니 다:

public static IServiceCollection AddMessageService(this IServiceCollection services, GreetingOptions options)
{  return services.AddScoped<IMessageService>(factory => new MessageService(options));
}
public static IServiceCollection AddMessageServiceAction(this IServiceCollection services, Action<GreetingOptions> optionsAction)
{
  var options = new GreetingOptions();
  optionsAction(options);
  return services.AddScoped<IMessageService>(factory => new MessageService(options));
}
Configure()에서 이 서 비 스 를 사용 합 니 다:

public void ConfigureServices(IServiceCollection services)
{
  services.AddMessageService(new GreetingOptions
  {
    GreetAt = "Morning",
    GreetTo = "Tahir"
  });
  services.AddMessageServiceAction(options =>
  {
    options.GreetAt = "Morning";
    options.GreetTo = "Tahir";
  });
}
Configure Services()가 Configure()보다 먼저 실행 되 기 때문에 Configure()에 이 서 비 스 를 직접 주입 할 수 있 습 니 다.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMessageService msg)
{
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync(msg.FormatMessage("by sanshi"));
  });
}
실행,이 때 페이지 표시:

클릭 하여 원본 다운로드:http://xiazai.jb51.net/201710/yuanma/MiddlewareWithParameters.rar
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 ASP.NET Core 2.0 의 초기 매개 변 수 를 가 진 미들웨어 문제 와 해결 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기