2016-03-14 2 views
2

Получаю «No MediaTypeFormatter доступен для чтения объекта типа« Продукт »из контента с типом медиатекста« текст/plain "Ошибка в консоли, когда я пытаюсь опубликовать данные своей формы в файл JSON с помощью ASP.NET WEBAPIНет MediaTypeFormatter доступен для чтения объекта типа «Продукт» из контента со носителем типа «text/plain»

Я не размещаю свой html-файл здесь, так как ошибок в html нет. Ошибка при отправке запроса.

Пожалуйста, помогите мне, поскольку я застрял сейчас и не могу продолжить движение вперед.

Контроллер вызова Post Метод:

var promisePost = crudService.post(Product);   
promisePost.then(function (pl) { 
    $scope.ProductName = pl.data.ProductName; 
    //loadRecords(); 
}, function (err) { 
    console.log("Err" + err); 
});  

Сообщение Метод в службы:

this.post = function (Product) { 
    var request = $http({ 
     method: "post", 
     url: "http://localhost:50326/api/Products/", 
     data: Product, 
     contentType: 'application/json; charset=utf-8' 
     //Content-Type: application/json 
    }); 
    return request; 
} 

WebAPI Метод:

public void Post([FromBody]Product product) 
{ 
    ProductsRepository repository = new ProductsRepository(); 
    var newproduct = repository.Save(product);  
    //return newproduct; 
} 

internal Product Save(Product product) 
{ 
    var products = this.Retrieve(); 
    var maxId = products.Max(p => p.ProductId); 
    product.ProductId = maxId + 1; 
    products.Add(product); 
    WriteData(products); 
    return product; 
} 

private bool WriteData(List<Product> products) 
{ 
    var filePath = HostingEnvironment.MapPath(@"~/App_Data/Products.json"); 

    var json = JsonConvert.SerializeObject(products, Formatting.Indented); 
    System.IO.File.WriteAllText(filePath, json); 

    return true; 
} 
+0

Ваше сообщение об ошибке и код не совпадают, то жалуется, что содержание 'текст/plain', но, основываясь на вашем почтовом коде должно быть' приложение/JSon '. Вы использовали что-то вроде скрипача, чтобы проверить фактический запрос POST, чтобы убедиться, что он доставлен правильно? – CodingGorilla

+0

Да. Я использовал Fiddler для проверки моего POST-запроса и в том, что я могу видеть, что мой запрос находится в правильном формате, и я тоже могу JSON. Проблема происходит в .then() функции я думаю, promisePost.then (функция (мн.ч.) {$ scope.ProductName = pl.data.ProductName; // loadRecords();} –

+0

Вы осмотрите 'контент- Заголовок типа? Я подозреваю, что это происходит в вашем 'then', потому что это то, что получает ошибку 500 от API? – CodingGorilla

ответ

0

Попробуйте разместить свои данные таким образом:

$http.post(
    'http://localhost:50326/api/Products/', 
    JSON.stringify(Product), 
    { 
     headers: { 
     'Content-Type': 'application/json' 
     } 
    } 
); 

Обратите внимание, что вам не нужно указывать кодировку символов (я никогда не видел эту часть, включенную в заголовок Contet-Type. См. Это: What does "Content-type: application/json; charset=utf-8" really mean?)

Обратите также внимание на то, что сериализуйте свой параметр как JSON, используя JSON.stringify, чтобы обеспечить правильный формат.

0

В API Formatter

SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json")); 
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain")); 
Смежные вопросы