2013-10-03 4 views
0

Я называю апи, какAjax вызова с строки запроса в ASP.NET Web Api

$.getJSON("/api/accapi/1?p=5&min=10&max=20" , function (json) { 
    ... 
}); 

и мой ApiController

public class AccApiController : ApiController 
{ 
    // GET api/accapi 
    public string GetAccApi(string id) 
    { 
     return id; 
    } 
} 

и мой маршрут

 config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

меня без моего querystrings

{"1"} 

Что не хватает?

ответ

0

Все, что вы вернули, было единственным параметром, id. По вашему маршруту и ​​строки запроса, у вас есть четыре параметра:

  • id = 1
  • p = 5
  • min = 10
  • max = 20

Но ваши действия контроллера игнорирует три из них:

public string GetAccApi(string id) 

Если вы хотите, чтобы эти другие значения строки запроса в вашем действии контроллера, просто добавьте их в качестве параметров метода:

public string GetAccApi(string id, string p, string min, string max) 

Как для вывода, что вы хотите увидеть? Все они как одна строка? Вы могли это сделать:

return id + p + min + max 

Что бы вернуть это:

{"151020"} 

Я сомневаюсь, что это то, что вы хотите. Но вы должны быть более ясными о том, что вы do хотите, чтобы он вернулся. Любая структура будет делать. Например, пользовательский объект:

public SomeObject GetAccApi(string id, string p, string min, string max) 
{ 
    return new SomeObject(id, p, min, max); 
} 

В зависимости от структуры SomeObject, которые могли бы вернуться, как:

{ 
    "ID":"1", 
    "P":"5", 
    "Min":"10", 
    "Max":"20" 
} 

который, по меньшей мере, более структурированным. Это зависит от вас, что вы хотите вернуть и в какой структуре оно должно быть организовано.

+0

Спасибо, так что я могу взять его как целую порцию? Как и я, будущий параметр «p = 5 & min = 10 & max = 20» – Melih

+0

@Melih: Ну, вы можете восстановить такую ​​строку: 'return string.Format (" p = {0} & min = {1} & max = {2 } ", p, min, max);' Чтобы использовать фактическую строку, которая была отправлена, я полагаю, вы могли бы получить ее из объекта HttpRequest (http://msdn.microsoft.com/en-us/library/ system.web.httprequest.aspx) в контроллере, но это не рекомендуется, поскольку он плотно соединяет контроллер с контекстом HTTP. – David

+0

Нет, я имею в виду, я хочу взять в качестве целого следующего параметра из ajax-вызова для контроллера api, например «p = 5 & min = 10 & max = 20» – Melih

Смежные вопросы