2017-08-02 1 views
0

J'ai créé des projets webapi non-core pour interagir avec les applications mobiles. par exemple Si j'ai créé un contrôleur appelé Data et qu'il a une méthode appelée Recherche comme show ci-dessous. le projet a été configuré pour envoyer et recevoir des données json.peut seulement poster à la méthode de poste dans aspap core webapi

[HttpPost] 
public Searchresult search(SearchQuery s) 
{ 
    // code to search 
    return sr; //object of type Searchresult 
} 

je pourrais envoyer la demande de poste à cette méthode en utilisant postier en utilisant l'adresse suivante http://localhost/api/Data/search

De même, je peux créer d'autres fonctions à l'intérieur du contrôleur et les appeler en utilisant la voie «/api/[contrôleur] /[action]'.

Je ne pouvais pas faire la même chose dans le projet asp.netcore web api. Le routage était le niveau de contrôleur i.e '/ api/[controller]' et chaque fois que je publiais, seule la méthode de post était touchée. mis en œuvre int eh suivant. Il est exécuté quand je poste à « http://localhost/api/Data »

[HttpPost] 
public string Post([FromBody] testclass t) 
{ 
    return "{\"a\":\"" + t.a + "\",\"b\":\"" + t.b + "\"}"; 
} 

Le code suivant est jamais exécuté quand je poste à « http://localhost/api/Data/test »

[HttpPost] 
    public string test([FromBody] testclass t) 
    { 
     return "{\"a\":\""+t.a+"\",\"b\":\""+t.b+"\"}"; 
    } 
+0

Il ne s'agit pas d'un comportement «normal» d'un Core Api, il y a donc probablement quelque chose qui ne va pas avec vos routes ou un autre problème non couvert par le code fourni. Vous aurez plus de chance en vous référant à un scénario spécifique avec lequel vous rencontrez des problèmes (plutôt qu'une explication abstraite de ce que vous pensez être le problème) et en publiant votre code * réel *, car souvent, en créant un exemple de code fictif. vous éliminerez ou masquerez souvent le problème auquel vous êtes confronté dans votre code réel. –

+0

en fait c'est mon code actuel. J'ai créé un projet factice pour tester l'API web de base afin que je puisse commencer à mettre en œuvre le projet actuel. –

Répondre

0

Il est fort probable que votre contrôleur ne comprend pas la différence entre vos itinéraires. Vous devez définir explicitement les itinéraires comme suit:

[HttpPost("post")] 
public string Post([FromBody] testclass t) 
{ 
    return "{\"a\":\"" + t.a + "\",\"b\":\"" + t.b + "\"}"; 
} 

[HttpPost("test")] 
public string Test([FromBody] testclass t) 
{ 
    return "{\"a\":\""+t.a+"\",\"b\":\""+t.b+"\"}"; 
} 

Ensuite, envoyez-les.