2017-02-20 9 views
1

Я создал веб-приложение Asp.Net Core и собираюсь внедрить веб-API.Asp.net core api получает ошибку «415 Unsupported Media Type» от Javascript, а не почтальона

У меня есть функциональный HttpGet реализован и теперь пытается реализовать функцию HttpPost:

[HttpPost] 
    public object Post([FromBody] object data) 
    {    
     return null; 
    } 

Я проверил это с помощью почтальона, который работал хорошо. Я установил его с помощью json-объекта в теле (настроен на raw и JSON (application/json)).

Я получаю ожидаемый ответ.

Но когда я пытаюсь вызвать это с JavaScript, используя код, предложенный Почтальон (или мои собственные попытки):

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://localhost:51139/api/data", 
    "method": "POST", 
    "headers": { 
    "content-type": "application/json", 
    "cache-control": "no-cache", 
    "postman-token": "999ee8ee-4e92-acb8-b7cf-144ffa49e5ee" 
    }, 
    "processData": false, 
    "data": "{\"Message\":\"This is body data\"}" 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

я получаю ошибку «415 неподдерживаемый тип носителя для печати».

Кто-нибудь видит, где я иду не так?

+0

Откуда вы называете javascript? Со страницы? С другого сайта? – Max

+0

У меня просто есть простая страница html, которую я открываю в браузере. Нет веб-сервера или что-то в этом роде. –

+0

Если я запустил код со страницы на простом веб-сервере, я получаю тот же ответ. –

ответ

0

Вы могли бы попробовать что-то вроде этого

[HttpPost] 
public object Post() 
{ 
    Object o = Request.Form.First(o => o.Key == "data").Value 
    return null; 
} 

Затем, если вы можете создать класс этого объекта вы можете использовать JsonConvert для десериализации этого объекта в объект класса, который вы создали.

+0

Я получаю сообщение об ошибке «System.InvalidOperationException:« Некорректная ошибка Content-Type: application/json », когда я это пробовал (с небольшими исправлениями в коде). –

+0

Попробуйте украсить ваш контроллер с помощью [Produces («application/json»)]. Затем убедитесь, что вы создали модель C# вместо использования общего объекта. Это, вероятно, не удается из-за того, что .net не может привязать вашу модель к тому, что получает. Итак, чтобы сохранить код, сделайте то же самое, но создайте модель C# ваших данных и украсьте ее с помощью [Produces («application/json»)]. Надеюсь, что это поможет – Harry