ASP.NET VirtualPathProvider .Execute()': не найден подходящий метод для переопределения
В настоящее время я пытаюсь реализовать Razor Web Pages в более старом проекте WebForms, а также сделать возможным рендеринг частичных представлений из строки (взятой из базы данных в другом месте). Я реализовал пользовательский VirtualPathProvider со всеми переопределениями, указанными здесь: ASP.NET MVC и виртуальными представлениями, а также переписал эти методы:
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if (virtualPath.Contains("RazorMigration.cshtml") && HttpContext.Current.Items.Contains("RazorTestingPage"))
{
return null;
}
return Previous.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
public override String GetFileHash(String virtualPath, IEnumerable virtualPathDependencies)
{
if (virtualPath.Contains("RazorMigration.cshtml") && HttpContext.Current.Items.Contains("RazorTestingPage"))
{
return Guid.NewGuid().ToString();
}
return Previous.GetFileHash(virtualPath, virtualPathDependencies);
}
Затем, когда я пытаюсь фактически отобразить страницу (completeTemplate уже содержит чистый HTML с уже проанализированной бритвой) следующим образом:
var rt = new RouteData();
rt.Values.Add("controller", "WebFormShimController");
var httpCtx = new HttpContextWrapper(System.Web.HttpContext.Current);
var ctx = new ControllerContext(new RequestContext(httpCtx, rt), new WebFormShimController());
try
{
HttpContext.Current.Items.Add("RazorTestingPage", completeTemplate);
IView view = ViewEngines.Engines.FindPartialView(ctx, System.IO.Path.GetFileName("RazorMigration")).View;
ViewContext vctx = new ViewContext(ctx, view,
new ViewDataDictionary { Model = model },
new TempDataDictionary(), httpCtx.Response.Output);
view.Render(vctx, System.Web.HttpContext.Current.Response.Output);
}
Я всегда ловлю Exception On view.Render, говоря так:
c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Временные файлы ASP.NET \root\0e7dfb6a\c63cc9d1\App_Web_razormigration.cshtml.afd51fd3.jujzzimy.0.cs(41): ошибка CS1009: нераспознанная escape-последовательность
Я не совсем уверен, в чем здесь проблема, или где и как этот путь построен. Если бы кто-то мог указать мне правильное направление, я был бы очень счастлив, поскольку я пытаюсь заставить это работать почти неделю, но все еще безуспешно.
РЕДАКТИРОВАТЬ: я обнаружил ошибку - это было в моей кодировке при записи в файл (поэтому, когда файл был записан, были добавлены символы \NUL, что запутало IIS) Теперь я получаю эту ошибку:
CS0115: c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\0e7dfb6a\c63cc9d1\App_Web_4b7b71f4-87c2-4364-be0e-19ec2a81ceccR.0.cs.Execute()': no suitable method found to override
Я уверен, что у меня нет ошибки в моем представлении, поскольку оно содержит только это:
<h1>Hello</h1>