2014-12-16 9 views
5

Staram się pisać dwa parametry do następujących funkcji, ale nie udało się dotrzeć do funkcji:C# web-api po funkcjonować z dwoma parametrami

public void SetShopSubCategories([FromBody]string userId, int []subCategories) 
{ 

} 

To jak mam pisać:

var subCategories = [ 1, 2, 3, 4, 5]; 
var userId = "123"; 

      $.ajax({ 
       type: "POST", 
       url: "/Category/SetShopSubCategories/", 
       contentType: 'application/json; charset=utf-8', 
       data: JSON.stringify(userId, subCategories), 
       success: function() { 
        alert("OK"); 
       }, 
       error: function() { 
        alert("error"); 
       } 

Kiedy zakładać tylko jednego parametru idzie dobrze i mogę osiągnąć funkcję:

public void SetShopSubCategories([FromBody]string userId) 
{ 

} 

var userId = "123"; 

     $.ajax({ 
      type: "POST", 
      url: "/Category/SetShopSubCategories/", 
      contentType: 'application/json; charset=utf-8', 
      data: JSON.stringify(userId, subCategories), 
      success: function() { 
       alert("OK"); 
      }, 
      error: function() { 
       alert("error"); 
      } 

To idzie również dobrze:

public void SetShopSubCategories(int []subCategories) 
{ 

} 

var subCategories = [ 1, 2, 3, 4, 5]; 

      $.ajax({ 
       type: "POST", 
       url: "/Category/SetShopSubCategories/", 
       contentType: 'application/json; charset=utf-8', 
       data: JSON.stringify(subCategories), 
       success: function() { 
        alert("OK"); 
       }, 
       error: function() { 
        alert("error"); 
       } 

My RoutConfig:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


      GlobalConfiguration.Configuration.Routes.MapHttpRoute(
       name: "SetCategories", 
       routeTemplate: "{controller}/{action}" 
      ); 


      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

Odpowiedz

3

model

public class Mymodel 
    { 
     public string UserId { get; set; }   
     public int[] subCategories { get; set; } 
    } 

Controller Akcja

[HttpPost] 
     public void SetShopSubCategories([FromBody]Mymodel model) 
     { 

     } 

Ajax rozmowy:

var subCategories = [1, 2, 3, 4, 5]; 
var userId = "123" 
$.ajax({ 
    type: "POST", 
    url: "/api/Values", 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify({ userid: userId, subCategories: subCategories }), 
    success: function() { 
     alert("OK"); 
    }, 
    error: function() { 
     alert("error"); 
    } 
}); 

Oto link: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

okaże się, że stwardnienie parametr niedozwolone lub problematyczne ze względu na rodzaj strumienia.

+0

Tak, właśnie to zrobiłem. – Eyal

+0

Jeśli musisz obsługiwać wiele, niż musisz budować wiele rzeczy, od niestandardowego FromBody do tego, jak się wiąże, a nawet musisz przechowywać swój strumień, to jest niestandardowy bufor i tak dalej. – dotnetstep

0

try poniżej kod, a także dodać dataType: 'json'

$.ajax({ 
      type: "POST", 
      url: "/Category/SetShopSubCategories", 
      contentType: 'application/json; charset=utf-8', 
      data: JSON.stringify({ userId : userId, subCategories : subCategories}), 
      dataType: 'json', 
      success: function() { 
       alert("OK"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
+0

Nadal nie może dojść do funkcji. – Eyal

+0

dlaczego umieściłeś [FromBody] tutaj? @Eyal – Neel

0

zmienić config trasy do zaakceptowania dwa parametry: albo zmiana trasy lub dodać na nowo pod inną nazwą

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}/{category}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, category= UrlParameter.Optional} 
      ); 
+0

Nadal nie można uzyskać funkcji. – Eyal

Powiązane problemy