2017-11-23 2 views
-1

Ich versuche zu überprüfen, ob der Pfad, ich bin vorhanden oder nicht, z. tutMVC CORE 2.0 Check Pfad existiert von Controller und Ansicht existieren und wenn nicht, gehen Sie zu eigenen 404 Seite

www.mysite.com/foobar

oder

www.mysite.com/foobar/delete

existieren.

Ich habe versucht, diese Methode vor 2 Wochen veröffentlicht und das scheint im Internet als eine Lösung weit verbreitet.

https://www.brainarama.com/thought/6e3d4320-ad5a-11e7-b750-89d12fa18e60/A-way-to-determine-if-an-ASP-NET-MVC-view-exists

Aber das nicht mit dem Code

ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null); 

mit

ViewEngineResult viewResult = Microsoft.AspNetCore.Mvc.ViewEngines.Engines.FindView(ControllerContext, viewName, null); 

zu

umgewandelt werden zu bekommen ViewEngines sogar an der Spitze mit using Microsoft.AspNetCore.Mvc.ViewEngines; erkannt werden, aber dann Engines existiert nicht innerhalb, also habe ich die Fehlermeldung "Der Typ oder die Namen Temporname Engines existiert nicht im Namensraum ViewEngines "

Irgendwelche Ideen, wie man den Pfad auf andere Weise überprüft oder diesen Code repariert, damit es funktioniert?

Antwort

0

Im mvc-Kern müssen Sie den ICompositeViewEngine-Dienst in Ihren Controller injizieren. Die Architektur von MVC Core basiert auf DI.

using Microsoft.AspNetCore.Mvc; 
using Microsoft.AspNetCore.Mvc.ViewEngines; 

namespace DoctorCode.BookStore.Controllers 
{ 
    public class HomeController : Controller 
    { 
     private readonly ICompositeViewEngine _viewEngine; 

     public HomeController(ICompositeViewEngine viewEngine) 
     { 
      _viewEngine = viewEngine; 
     } 

     public IActionResult Index() 
     { 
      var viewName = "Index"; 
      var isMain = true; //or flase for PartialView 

      var viewResult = _viewEngine.GetView(executingFilePath: null, viewPath: viewName, isMainPage: isMain); 
      var originalResult = viewResult; 
      if (!viewResult.Success) 
      { 
       viewResult = _viewEngine.FindView(ControllerContext, viewName, isMainPage: isMain); 
      } 

      //do stuff ... 

      return View(); 
     } 
    } 
} 
Verwandte Themen