Middleware arbeitet auf der Ebene von ASP.NET Core und kann auf jede einzelne Anforderung reagieren, die in die Anwendung eingeht.
MVC-Filter werden dagegen nur für Anforderungen ausgeführt, die an MVC gesendet werden.
Wenn ich beispielsweise erzwingen möchte, dass alle Anforderungen über HTTPS ausgeführt werden müssen, müsste ich dafür eine Middleware verwenden. Wenn ich einen MVC-Filter erstellen würde, der dies tut, könnten Benutzer weiterhin z. B. statische Dateien über HTTP anfordern.
Andererseits könnte etwas, das Anforderungsdauern in MVC-Controllern protokolliert, absolut ein Aktionsfilter sein.