2017-11-23 5 views
-1

現在のパスが存在するかどうかを確認しようとしています。MVC CORE 2.0コントローラのチェックパスが存在し、ビューが存在し、存在しない場合は404ページに移動します。

www.mysite.com/foobar

または

www.mysite.com/foobar/delete

は存在しません。

2週間前に公開されたこの方法を試しましたが、これは解決策としてインターネットの周りにかなり普及しているようです。

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

しかし、それはコードViewEnginesが一番上にでもusing Microsoft.AspNetCore.Mvc.ViewEngines;で認識されるように取得する

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

に変換する必要がある

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

で失敗したが、その後Enginesその中に存在しないので、エラーメッセージが表示されます "タイプまたは名前ペース名エンジンが名前空間に存在しないViewEngines "

他の方法でパスをチェックする方法やこのコードを修正して動作させる方法はありますか?

答えて

0

mvcコアでは、コントローラにICompositeViewEngineサービスを注入する必要があります。 mvcコアのアーキテクチャは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(); 
     } 
    } 
} 
関連する問題