Отправка Json в C # WebApi из React - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть действие C # WebAPI. Я пытаюсь опубликовать в нем строку (но строку в формате json) с помощью React.

По какой-то причине я получаю метод 405 Not Allowed, когда тип контента - aopplication / json. Urlencoded попадает в PostTransaction, но тело всегда имеет значение null. Что мне нужно изменить, чтобы получить json в PostTransaction?

WebConfig

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

WebApiConfig

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

C # WebApi

[HttpPost]
[ActionName("PostTransaction")]
public string PostTransaction([FromBody] string body, string task, int key, string filters, string options)
{
    // body is null from react when content type is urlencoded, but correct from jquery post
    string returnString = "no data found";
    if (body != null) {
        returnString = body.ToString();
    }

    return returnString;
}

Реагировать

var dataToSend = JSON.stringify({ param1: "value1", param2: "value2"});
fetch('http://localhosturl/PostTransaction',
  {
    method: 'post',
    headers: {
      'Accept': 'application/json, text/plain, */*',
      'Content-Type': 'application/json'
    },
    body: dataToSend
  })
  .then(response => {
}

JQuery Post

var dataToSend = JSON.stringify({ param1: "value1", param2: "value2"});
$.post('http://localhosturl/PostTransaction', { '': dataToSend }).done(function (data) {
     console.debug(data); // returned data from Web API
});

Спасибо

1 Ответ

0 голосов
/ 15 сентября 2018

Таким образом, причина разницы в том, что мне нужно было преобразовать объект в React в строку, а затем снова ее преобразовать в строку.

Мой оригинальный пост сделал это, но в то же время я изменилиз urlencoded в application / json, если бы я просто изменил его (см. историю) на application / json без удаления второго stringify, он бы работал нормально.

body: JSON.stringify(JSON.stringify(dataToSave))

Это так, чтобы прион действительно опубликован, в нем все еще есть экранированные кавычки.

...