我有一个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
现在,我的问题在于旧的剃刀页面,它们由于某种原因(而不是使用剃刀视图引擎)使用此引擎进行渲染,并且在“查找视图”时会出现异常。功能运行。
我以特殊的方式渲染我的剃刀页面,但最重要的是,它看起来像这样:
public ActionResult MyAction()
{
return View('Razor/abcd.cshtml',model);
}
我已经读过网络表单引擎首先运行,只有在剃刀运行之后才会运行,但我不确定这是否正确。
我已尝试从自定义引擎返回null和其他内容,但该页面无法呈现。
为什么我的.cshtml路径会使用自定义引擎呈现,而不是使用剃刀引擎? 如何告诉自定义引擎传递以.cshtml结尾的文件?
答案 0 :(得分: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;
}
}