2016-12-30 1 views
0

J'ai un contrôleur API Webappel API Web avec l'attribut de route à l'aide ajax

public class DefaultController : ApiController 
{ 
    [HttpPost] 
    public IHttpActionResult PostAction(int id, Student student) 
    { 
     return Ok("This is message"); 
    } 

} 

Je peux appeler PostAction méthode utilisant JQuery

<script> 
    $(document).ready(function() { 
     $("#btn").click(function() { 
      var obj = { 'name': 'alex' }; 
      $.ajax({ 
        method: "POST", 
        url: '@Url.Action("PostAction","Default",new {id=3,httproute=true})', 
        data: obj 
       }) 
       .done(function(data) { 
        alert("success: " + data); 
       }) 
       .fail(function(xhr, status, error) { 
        alert("error: " + xhr.responseText); 
       }); 
     }); 
    }); 
</script> 

URL générée est:/api/default/3'

maintenant, si je mets l'attribut de routage sur le contrôleur

[Route("api/default")] 
public class DefaultController : ApiController 

Comment appeler les API en utilisant Url.Action?

Répondre

1

Vous n'appliquez pas l'attribut Route au contrôleur, mais vous l'appliquez à une méthode d'action.

De même, il ne sert à rien d'appliquer un modèle de route correspondant à l'URL du modèle de route par défaut. Mais si vous utilisez le routage d'attribut pour donner un bon modèle d'URL à votre méthode d'action, vous pouvez également spécifier le nom de l'itinéraire que vous pouvez utiliser avec la méthode d'assistance HttpRouteUrl.

public class DefaultController : ApiController 
{ 
    [HttpPost] 
    [Route("api/default2",Name = "MyApi")] 
    public IHttpActionResult PostAction(int id, Student student) 
    { 
     return Ok("This is message"); 
    } 
} 

et dans votre vue rasoir, vous pouvez le faire.

<script> 
    var url = "@Url.HttpRouteUrl("MyApi", new { id = 3 })"; 
</script>