myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » [gelöst] ASP.NET Core kann Controller nicht aufrufen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[gelöst] ASP.NET Core kann Controller nicht aufrufen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Olii
myCSharp.de-Mitglied

Dabei seit: 20.09.2017
Beiträge: 66


Olii ist offline

[gelöst] ASP.NET Core kann Controller nicht aufrufen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, ich bastel gerade eine kleine API mit GraphQL. Ich habe das Problem das wenn ich ein Request schicke ich zwar, wenn ich ein Haltepunkt mache im Konstruktor des Controllers, dort rein komme, aber die Funktion also der eigentliche Endpoint nicht aufgerufen wird. Ich finde einfach nicht raus woran es liegt. Bei dem Standard Endpoint wenn man eine neue API erstellt, klappt es.

Der Controller

C#-Code:
[Route("graphql")]
    public class GraphQLController : Controller
    {
        public GraphQLController(IDocumentExecuter documentExecuter,ISchema schema)
        {
            _documentExecuter = documentExecuter;
            _schema = schema;
        }

        [HttpPost]
        public async Task<IActionResult> Post([FromBody]GraphQLQuery query)
        {
         //.........
         }
    }

Die Anfrage schicke ich dann über Postmen an den Point:
 http://localhost:5000/graphql

Mit dem Body:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
{ 
 "query":
  "query{
     category(id:1){
       id 
       name
     }
   }"
}

*EDIT
Hier auch noch die Startup-Datei:

C#-Code:
public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<EasyStoreQuery>();
            services.AddTransient<ICategoryRepository, CategoryRepository>();
            services.AddTransient<IProductRepository, ProductRepository>();
            services.AddScoped<IDocumentExecuter, DocumentExecuter>();
            services.AddTransient<CategoryType>();
            services.AddTransient<ProductType>();
            var sp = services.BuildServiceProvider();
            services.AddScoped<ISchema>(_ => new EasyStoreSchema(type => (GraphType) sp.GetService(type)) {Query = sp.GetService<EasyStoreQuery>()});

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            //app.UseCors("EnableCORS");
            app.UseHttpsRedirection();
            app.UseMvc();
        }

*EDIT *EDIT
Ich habe heruasgefunden das es

C#-Code:
[FromBody]GraphQLQuery query

In der Funktion liegt. Aber soweit ich das sehe müsste das richtig sein.
Das Model:

C#-Code:
public class GraphQLQuery
    {
        public string OperationName { get; set; }
        public string NamedQuery { get; set; }
        public string Query { get; set; }
        public string Variables { get; set; }
    }

Nehme ich das [FROMBODY] weg dann wird die Funktion aufgerufen, aber die variable ist dann leer ...

Ich versteh einfach nicht wieso die Funktion nicht aufgerufen wird. In meiner Rest API funktioniert das einwandfrei..

Ich danke im voraus schon einmal für Hilfe :)
Gruß Olli

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Olii am 19.05.2019 10:01.

Neuer Beitrag 18.05.2019 23:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.544
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Olii,

schön dass du eine Lösung gefunden hast, und dein Thema dementsprechend.auch als [gelöst] markiert hast. Noch besser wäre es, wenn du eine Antwort erstellt hättest, damit der Thread nicht mehr in den "Fragen ohne Antwort" auftaucht. Durch diese Antwort ist das Ziel aber auch erreicht.

mfG Gü
Neuer Beitrag 19.05.2019 12:21 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.794
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
services.AddScoped<ISchema>(_ => new EasyStoreSchema(type => (GraphType) sp.GetService(type)) {Query = sp.GetService<EasyStoreQuery>()});

vermeide sowas, wenn möglich.

Das geht saubrer:

C#-Code:
            services.AddScoped<IObjectGraphType, MyGraphQuerySchema>();
            services.AddScoped<ISchema, MyQuerySchema>();

 Link
Neuer Beitrag 19.05.2019 16:25 Beiträge des Benutzers | zu Buddylist hinzufügen
Olii
myCSharp.de-Mitglied

Dabei seit: 20.09.2017
Beiträge: 66

Themenstarter Thema begonnen von Olii

Olii ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich bin ehrlich, ich weis gar nicht so genau was die Zeile Code mascht :D. Die ist kopiert aus einem Tutorial. Ich sehe nur Arrow-Function in Arrow-Function...

Das was du als alternative dazu geschrieben hast, dass kann ich verstehen, das quasi die Klasse mit dem Interface verbunden wird, sag ich jetzt mal.

Vielen Dank für den Hinweis! :)
Neuer Beitrag 20.05.2019 11:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.794
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dependency Injection Sample von mir ist quasi ein implizites Erstellen von Instanzen durch Registrierung.
Dein Code macht das ganze explizit durch das Mischen via Service Locator Pattern - und der gilt als vermeidbarer Anti-Pattern.
Neuer Beitrag 20.05.2019 12:27 Beiträge des Benutzers | zu Buddylist hinzufügen
Olii
myCSharp.de-Mitglied

Dabei seit: 20.09.2017
Beiträge: 66

Themenstarter Thema begonnen von Olii

Olii ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also wenn ich das so mache:

C#-Code:
services.AddScoped<IObjectGraphType, EasyStoreQuery>();
services.AddScoped<ISchema, EasyStoreSchema>();

Kommt eine Fehlermeldung als Output:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
{
    "errors": [
        {
            "message": "Failed to call Activator.CreateInstance. Type: einfachAPI.Models.CategoryType",
            "extensions": {
                "code": "MISSING_METHOD"
            }
        }
    ]
}

Ich bin noch auf der suche was das sein könnte. Mit der Art wie es vorher war funktioniert es. Ich blick da noch nicht ganz durch.
Neuer Beitrag 20.05.2019 18:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.794
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dann stimmt der Aufbau der Klassen nicht.

Hab nen Vortrag zu modernen API Development; GraphQL ist auch dabei - inkl. DI Setup
 https://github.com/BenjaminAbt/2018-Talk...nApiDevelopment
Neuer Beitrag 21.05.2019 18:40 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.07.2019 11:26