【问题标题】:Posting Json to C# WebApi from React从 React 将 Json 发布到 C# WebApi
【发布时间】:2019-02-14 08:31:19
【问题描述】:

我有一个 C# WebAPI 操作。我正在尝试使用 React 向它发布一个字符串(但一个 json 字符串化字符串)。

由于某种原因,当内容类型为 aopplication/json 时,我收到 405 Method Not Allowed。 Urlencoded 确实进入 PostTransaction,但 body 始终为空。 我需要更改什么才能在 PostTransaction 中获取 json?

网络配置

<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 帖子

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

谢谢

【问题讨论】:

  • 您到底为什么使用'Content-Type': 'application/x-www-form-urlencoded'?您发送的 JSON 不是表单
  • 你的意思是在你的反应代码中做两次 JSON.stringify 吗?
  • 我使用 urlencoded 的原因是因为如果使用 application/json 会出现 405 错误。也许这是我的主要问题。这些支持的媒体类型还不够吗? config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
  • 永远不要解决这些问题......“嗯,无法发送应用程序/json,哦,好吧,让我们发送 urlencoded”......从来都不是一个好主意,而且更令人困惑当你来到 SO :)

标签: c# ajax reactjs asp.net-web-api2 frombodyattribute


【解决方案1】:

所以差异的原因是我需要将 React 中的对象转换为字符串,然后再次对其进行字符串化。

我的原始帖子确实这样做了,但同时我将它从 urlencoded 更改为 application/json,如果我最初将它(参见历史记录)更改为 application/json 而不删除第二个 stringify,它会工作正常。

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

这样当它实际发布时,它仍然有转义的引号。

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2020-11-25
    • 2018-07-12
    • 2016-07-22
    相关资源
    最近更新 更多