Sur la base de cette question ici et en utilisant le code trouvé ici J'essaie de charger des vues qui sont des ressources intégrées dans un projet DLL séparé, et l'auteur de la question originale dit qu'il a réussi à le faire - mais je n'arrive pas à le faire fonctionner car il semble que le moteur de vue MVC intercepte la requête et continue à chercher la vue dans le système de fichiers. Exception :
Server Error in '/' Application.
The view 'Index' or its master could not be found. The following locations were searched:
~/Views/admin/Index.aspx
~/Views/admin/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/App/Views/admin/Index.aspx
~/App/Views/admin/Index.ascx
~/App/Views/Shared/Index.aspx
~/App/Views/Shared/Index.ascx
J'utilise un CustomViewEngine, comme celui de la structure /App de Rob Connery, comme suit :
public class CustomViewEngine : WebFormViewEngine
{
public CustomViewEngine()
{
MasterLocationFormats = new[] {
"~/App/Views/{1}/{0}.master",
"~/App/Views/Shared/{0}.master"
};
ViewLocationFormats = new[] {
"~/App/Views/{1}/{0}.aspx",
"~/App/Views/{1}/{0}.ascx",
"~/App/Views/Shared/{0}.aspx",
"~/App/Views/Shared/{0}.ascx"
};
PartialViewLocationFormats = ViewLocationFormats;
}
}
Voici mes itinéraires :
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Home", "", new {controller = "Page", action = "Index", id = "Default"});
routes.MapRoute("Default", "Page/{id}", new { controller = "Page", action = "Index", id = "" });
routes.MapRoute("Plugins", "plugin/{controller}/{action}", new { controller = "", action = "Index", id = "" });
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "ResourceNotFound404" });
Dans mon AssemblyResourceProvider Je vérifie si le chemin d'accès commence par "~/plugin/" et utilise ensuite la convention du nom de fichier de la dll plugin.{controller}.dll.
Des suggestions ?
UPDATE : Au moment où la demande de disons est acheminée http://localhost/plugin/admin arrive au VirtualFileProvider, il n'y a pas de vue attachée à la fin. Ainsi, dans la méthode Open du VirtualFileProvider, le chemin virtuel "~/plugin/admin" est transmis alors qu'il devrait être "~/plugin/admin/Index.aspx" comme défini dans ma route ci-dessus. Est-ce que je me suis trompé dans mes routes ou ai-je raison de m'attendre à ce que cela se produise ?