2014-05-15 53 views
0

我有一個asp.net web api應用程序,也呈現一些剃鬚刀頁面。
默認情況下,有兩個默認引擎(webform \ razor),並且在渲染我的剃鬚刀頁面時沒有問題。
自定義和剃刀視圖引擎混亂而組合兩個

現在我需要支持一些使用自定義引擎呈現的舊aspx \ ascx頁面。

所以,當我引導我的申請,我這樣做:

// Remove the default web form engine 
    ViewEngines.Engines.Remove(ViewEngines.Engines.OfType<WebFormViewEngine>().FirstOrDefault()); 
    // Add my custom engine 
    ViewEngines.Engines.Add(ApplicationContainer.Resolve<CustomViewEngine>()); 

我的自定義視圖引擎的原型是:

public class CustomViewEngine: VirtualPathProviderViewEngine 

現在,我的問題是與舊的剃刀頁面,它們會呈現由於某種原因(而不是使用剃鬚刀視圖引擎)使用此引擎,並且在「FindView」函數運行時出現異常。

我已經呈現一種特殊的方式我的剃鬚刀頁面,但底線,它看起來像這樣:

public ActionResult MyAction() 
{ 
    return View('Razor/abcd.cshtml',model); 
} 

我讀過的網頁表單引擎之後纔是剃鬚刀一個第一和運行運行,但我不確定這是否正確。
我試過從定製引擎返回null和其他東西,但是頁面沒有呈現。

爲什麼我的.cshtml路徑使用自定義引擎而不是使用剃鬚刀引擎呈現?
如何告訴自定義引擎傳遞以.cshtml結尾的文件?

回答

0

好吧,我已經找到了一個解決辦法 - 從「FILEEXISTS」功能將進入下一個文件引擎返回false:

protected override bool FileExists(ControllerContext controllerContext, string virtualPath) 
     { 
      try 
      { 
       return !virtualPath.EndsWith("cshtml") && 
        File.Exists(controllerContext.HttpContext.Server.MapPath(virtualPath)); 
      } 
      catch (HttpException exception) 
      { 
       if (exception.GetHttpCode() != 0x194) 
       { 
        throw; 
       } 
       return false; 
      } 
      catch 
      { 
       return false; 
      } 
     }