WebAPI, строка [FromBody], application / json, ошибка 415 (неподдерживаемый тип носителя) - PullRequest
0 голосов
/ 23 мая 2018

У меня есть проект WebAPI (c #), и я проверяю его на своей странице (Index.cshtml):

<html>
<head>
...
</head>
<body>

    <script src="@Url.Content("~/Scripts/jquery-3.2.1.js")" type="text/javascript"></script>
    <script type="text/javascript">

    function GetData() {
        $.ajax({
            url: "http://localhost:0000/api/test/test/cox/Test",
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify("Hello!!!"),
            crossDomain: true,
            processData: false,
            contentType: 'application/json, charset=utf-8',
            headers: { User: "test", Password: "test" },
            success: function (q, w, e) {
                alert(JSON.stringify(q));
            },
            error: function (q, w, e) {
                alert("error: " + w);
            }
        });
    }

</script>

<p>
    <button onclick="GetData()">GetData</button>
</p>

</body>
</html>

Эта страница вызывает мой метод:

[HttpPost]
[ResponseType(typeof(IEnumerable<СompositeType>))]
public HttpResponseMessage Test(string cox, [FromBody] string str)
{
   ...    
}

и яполучить ошибку: 415 «Неподдерживаемый тип носителя».Я читал об этой ошибке, и кто-то говорит, что contentType: 'application/json, charset=utf-8' решит проблему.Я знаю, что атрибут [FromBody] вызывает contentType: 'application/json' для преобразования, но я не понимаю, почему у меня ошибка 415.

1 Ответ

0 голосов
/ 23 мая 2018

Я нашел решение, но это немного читер.(Я хочу сказать: «Спасибо!)», За ответы).

Первый .Я изменил это:

 data: JSON.stringify({"str":"Hello!!!"}),
 contentType: 'application/json; charset=utf-8',

Второй .Я изменил это:

[HttpPost]
[ResponseType(typeof(IEnumerable<СompositeType>))]
public HttpResponseMessage Test(string cox, [FromBody] Test str)
{
   ...    
}

Третий .Я добавил новый класс:

public class Test
{
    public string str { set; get; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...