2016-12-14 168 views
0

我嘗試在macOS上創建一個asp.net核心web api。ASP.NET核心 - MVC上的中間件

但是我的中間件沒有在mvc-call上調用。

我的配置:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, BackendDbContext context) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     //app.UseStaticFiles(); 

     app.UseMvc(); 
     app.UseMiddleware<AuthMiddleware>(); 

     BackendDbInitializer.Init(context); 
    } 

而且我中間件:

public class AuthMiddleware 
{ 
    private readonly RequestDelegate _next; 

    public AuthMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     Console.WriteLine("Invoke......................"); 

     await _next.Invoke(context); 
    } 
} 

當我做一個HTTP請求,不匹配的控制要求。中間件類被調用。

我該如何設置中間件類僅在mvc-request上調用。

回答

1

您可以使用中間件作爲MVC過濾器:

public class HomeController : Controller 
{ 
    [MiddlewareFilter(typeof(AuthMiddleware))] 
    public IActionResult Index() 
    { 
     return View(); 
    } 
} 

在這種情況下,將AuthMiddleware每個動作方法Index被調用時運行。

PS:您需要安裝該軟件包(Microsoft.AspNetCore.Mvc.Core

more info(見中間件作爲MVC過濾部分)

+0

我真正的新MVS我覺得你的方法是控制器裏面?但我不想在每種方法上添加註釋,因爲我想在每種方法上使用這種註釋。 – Flo

+0

@Flo我已經更新了我的答案。您也可以在控制器上應用此過濾器。 –

+0

好吧,我將使用中間件作爲身份驗證。我想在每個其他控制器和每種方法上調用它。我可以不配置它全球? – Flo