2013-01-17 7 views
1

j'ai un itinéraire:demande Web api invalide

routes.MapRoute (name: "apicontroller2", 
       url: "api/{controller}/{action}/", 
       defaults: new { controller = "Default2", action = "Index" } 
       ); 

et Default2Controller avec deux méthodes post:

[HttpPost] 
public HttpResponseMessage Post(ttReview review) 
{ 
... 
} 

[HttpPost] 
public HttpResponseMessage PostPro(ttbewertungenpro pro) 
{ 
... 
} 

quand j'appelle ces API méthodes via webserver/api/default2/PostPro/ ou webserver/api/default2/Post/ ajax post-je obtenir la erreur:

ExceptionMessage=Multiple actions were found that match the request: 
System.Net.Http.HttpResponseMessage Post(WT.Models.ttReview) on type WT.Controllers.Default2Controller 
System.Net.Http.HttpResponseMessage PostPro(WT.Models.ttbewertungenpro) on type WT.Controllers.Default2Controller 

Mes appels ajax sont:

$.ajax({ 
     url: "../api/default2/Post", // or "../api/default2/PostPro", 
     type: 'POST', 
     dataType: "text", 
     data: review, // or pro 
     success: function (test) { 
     }, 
     error: function (test) { 
      alert("Error"); 
     } 
} 

est ma route faux ou quoi? lorsque je supprime une méthode les autres travaux ...

+1

Les messages pour/Default2/rechercheront Default2Controller, mais votre contrôleur s'appelle DefaultController2. – ryadavilli

+0

Que se passe-t-il lorsque vous renommez 'PostPro' en' Test' pour vous débarrasser du préfixe commun 'Post'? –

+0

ne change rien – daniel

Répondre

1

Avec un son nouveau projet vierge WebAPI - Je ne l'ai pas touché le fichier global.asax.

Accueil Contrôleur

[HttpPost] 
public HttpResponseMessage Post(string review) 
{ 
    return new HttpResponseMessage(HttpStatusCode.Created); 
} 

[HttpPost] 
public HttpResponseMessage PostPro(string pro) 
{ 
    return new HttpResponseMessage(HttpStatusCode.Created); 
} 

Index.cshtml

<script src="~/Scripts/jquery-1.7.1.js"></script> 

<script> 

    $(document).ready(function() { 

     $("#submit").click(function() { 

      $.ajax({ 
       url: "home/Post", // or "../api/default2/PostPro", 
       type: 'POST', 
       dataType: "text", 
       data: "test", // or pro 
       success: function(test) { 
       }, 
       error: function(test) { 
        alert("Error"); 
       } 
      }); 

     }); 

    }); 


</script> 


<input type="submit" value="submit" id="submit" /> 

Cela fonctionne bien pour moi, le problème doit être votre chemin/routes.

2

Découvrez AttributeRouting (http://nuget.org/packages/AttributeRouting.WebApi)

Il est tellement plus facile de la carte de vos itinéraires.

Exemple

[POST("Page/Method")] 
public HttpResponseMessage Post(ttReview review) 
{ 
... 
} 
+0

cela résout le problème, mais je dois encore définir chaque route manuellement. C'est plus une solution de contournement que la résolution du problème initial. Donc je ne veux pas le marquer comme une réponse pour le moment. – daniel

+0

Que diriez-vous d'un vote au moins? – Diginari