Web Api 2 bad request
Je suis un débutant avec l'api Web et Im essayant de configurer un simple owin selfhosted service que Im essayant de sortir.
J'ai été la recherche stackoverflow et d'autres endroits pour un certain temps maintenant, mais je ne peux pas l'air de trouver quelque chose évidemment faux.
Le problème que j'ai c'est que j'ai une mauvaise réponse à la requête à chaque fois que j'essaie d'appeler mon service.
Le contrôleur ressemble à ceci:
[RoutePrefix("api/ndtdocument")]
public class NDTDocumentsController : ApiController, INDTDocumentsController
{
[HttpGet]
public IHttpActionResult Get()
{
var document = Program.NDTServerSession.GetNextNDTDocument(DateTime.Today);
if (document == null)
return null;
return Ok(document);
}
[Route("")]
public IHttpActionResult Post([FromBody] NDTDocument ndtDocument)
{
try
{
Program.NDTServerSession.AddNDTDocument(ndtDocument);
return Ok();
}
catch(Exception ex)
{
return BadRequest(ex.Message);
}
}
}
Et le client ressemble à ceci:
static void Main(string[] args)
{
AddNDTDocument(@"C:\Testing.txt");
}
private static void AddNDTDocument(string centralserverPath)
{
var client = GetServerClient();
NDTDocument document = new NDTDocument();
var response = client.PostAsJsonAsync("ndtdocument", document).Result;
}
static HttpClient GetServerClient()
{
var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:9000/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
Je peux voir quand je debug-il que l'uri de la demande est en effet http://localhost:9000/api/ndtdocument
Mais la réponse est toujours la mauvaise demande et j'ai un point d'arrêt dans le contrôleur, et il n'est jamais invoquée.
Chaque fois que j'essaie de faire quelque chose avec les api web, j'ai Toujours des plus étranges (mais simple problème).
Toutes les pensées?
Merci!
Vous devez vous connecter pour publier un commentaire.
API Web décidera de votre itinéraire en fonction de vos noms de méthode. Depuis que vous avez ajouté
[RoutePrefix("api/ndtdocument")]
sur le niveau de la classe, ce sera la route de votre contrôleur. Lors de l'api web à la recherche d'un action-ci correspondent à des noms de méthode, si dans votre cas, votre parcours réel seraithttp://localhost:9000/api/ndtdocument/post
.Lorsque vous essayez de décider ce que
http method
qu'une action spécifique nécessite l'api web va vérifier vos noms de méthodes et méthodes en commençant parpost
serahttp post
,get
serahttp get
etc.Donc permet de dire que nous serions plutôt appeler notre méthode
PostData
, pour commencer nous avons pu supprimer les[HttpPost]
attribut. Notre itinéraire serait maintenanthttp://localhost:9000/api/ndtdocument/postdata
. Nous allons maintenant dire que nous voulons que notre chemin pour être juste/data
. Nous avons alors tout d'abord renommer notre méthode à des Données, mais maintenant, web api ne sais pas quelle méthode http, nous voulons appeler cette méthode, c'est pourquoi nous ajoutons de la[HttpPost]
attribut.Edit après lecture de votre commentaire
[Route("/{id}]
avec le[HttpPost]
attribut.Okey, après près de va sérieusement fou. J'ai trouvé le problème.
J'ai oublié de référence webapi.hébergeur puis système.web.
Après cela, Tout a fonctionné comme un charme.
Vous devez utiliser la route des tags et de l'appeler de cette façon http://localhost:9000/api/get ou http://localhost:9000/api/post
pour plus d'informations, pls vérifier cette lien