2 votes

ASP.NET charge les vues d'une autre assemblée

J'ai une solution C# contenant deux projets : Client (parent) et RestAPI (enfant). À partir du projet client, je charge un serveur ASP.NET. Actuellement, mon RestAPI charge avec succès les contrôleurs depuis le projet client en utilisant services.AddControllersWithViews().AddApplicationPart(assembly); . Actuellement, seuls les contrôleurs peuvent être chargés, mais je veux aussi utiliser des vues.

Pour résumer, ce que j'essaie de faire est d'utiliser des vues qui sont situées dans mon projet Client par le projet RestAPI.

Ce que j'ai essayé de faire :

  1. services.AddControllersWithViews().AddApplicationPart(assembly); => Il ne charge que les contrôleurs
  2. services.AddMvc().AddApplicationPart(assembly); => Mêmes résultats
  3. Renvoie un chemin statique vers le fichier de vue (c'est-à-dire : return View("C:\Simon\..."); )

Structure du projet :

enter image description here

Dans le contrôleur DevicesController.cs J'ai la fonction suivante :

[Route("show")]
[HttpGet]
public ViewResult Show()
{
return View("Home");
}

Je veux renvoyer la vue dans le dossier Views situé sous le projet Client. Cependant, il ne renvoie que celle située sous RestAPI. Si je supprime celle qui se trouve dans RestAPI, l'application se bloque avec les journaux d'erreurs suivants :

System.InvalidOperationException : La vue 'Home' n'a pas été trouvée. Les emplacements suivants ont été recherchés : /Vues/Périphériques/Accueil.cshtml /Vues/Partagées/Accueil.cshtml

0voto

ndh103 Points 96

Je pense que vous devez envisager d'ajouter des relatedAssemblies.

private static void AddApplicationPart(IMvcBuilder mvcBuilder, Assembly assembly)
    {
        var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
        foreach (var part in partFactory.GetApplicationParts(assembly))
        {
            mvcBuilder.PartManager.ApplicationParts.Add(part);
        }

        var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(assembly, throwOnError: false);
        foreach (var relatedAssembly in relatedAssemblies)
        {
            partFactory = ApplicationPartFactory.GetApplicationPartFactory(relatedAssembly);
            foreach (var part in partFactory.GetApplicationParts(relatedAssembly))
            {
                mvcBuilder.PartManager.ApplicationParts.Add(part);
            }
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X