2016-05-30 4 views
0

У меня есть следующий код:список Зачисление объектов к контроллеру WebAPI

var keys = []; 
keys.push({"classKey":"Dashboard","resourceKey":"Today's turnover"}); 
keys.push({"classKey":"Dashboard","resourceKey":"Get an overview directly from your receipts on location."}); 

$.ajax({ 
    type: "POST", 
    url: "/Api/TranslationsApi/GetTranslationsByClassKey", 
    dataType: 'json', 
    contentType: "application/json", 
    data: JSON.stringify({ translations: keys }), 
    success: function (result) { 
     alert(result.Data); 
    } 
}); 

И этот контроллер WebAPI:

public class TranslationsApiController : ApiController 
    { 
    [System.Web.Http.HttpPost] 
    public JsonResult GetTranslationsByClassKey([FromBody]List<TranslationRequestModel> translations) 
    { 
     return new JsonResult { Data = translations.Count }; 
    } 
    } 

TranslationRequestModel:

public class TranslationRequestModel 
    { 
    public string ClassKey { get; set; } 
    public string ResourceKey { get; set; } 
    } 

Полезная нагрузка запрос выглядит следующим образом :

enter image description here

Однако я получаю

translate.js: 40 POST (Не найдено)

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

ответ

0

В WebApi (Rest) называет, что вы не называете метод, похожий на старый WebServices. Вы только использовать имя контроллера без слова контроллера, как:

/Api/TranslationsApi 

В Rest, чтобы иметь несколько POST или GET методы нужно уникальный URL для каждого, как:

/Api/TranslationsApi/{param1}/{param2} 

В WebApi2 вы могли бы сделать это с помощью RouteAttribute нравится:

[Route("api/TranslationsApi/{param1}"), HttpPost] 
public string PostMe2(int param1) 
    return "another POST value"; 
} 
0

вы должны опубликовать в /Api/TranslationsApi/ если настроить свои маршруты с шаблоном маршрута по умолчанию:

routes.MapHttpRoute(
    name: "API Default", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

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

$.ajax({ 
    type: "POST", 
    url: "/Api/TranslationsApi/", 
    dataType: 'json', 
    contentType: "application/json", 
    data: JSON.stringify(keys), 
    success: function (result) { 
     alert(result.Data); 
    } 
});