【问题标题】:POST request responds with 404 while GET request works fine .NET Core, ReactPOST 请求以 404 响应,而 GET 请求工作正常 .NET Core,React
【发布时间】:2018-09-04 11:35:29
【问题描述】:

我正在尝试使用一个 POST 和一个 GET 请求制作简单的 Web 应用程序,但我找不到任何解决方案,我非常绝望。我正在使用带有 React 的 .NET Core,一切正常,但是我无法让 POST 请求正常工作,我总是在控制台中得到 404。

来自 React 类的我的 POST 请求

handleSubmit(event){
    superagent.post('api/WorkingTime/SaveWorkingTime')
    .send({
    Comment: this.state.Comment,
    Date: this.state.Date,
    Time: this.state.Time
    })
    .set('Accept', 'application/json')
    .then(function(res) {
    alert('Saved ' + JSON.stringify(res.body));
    });
}

这是我想要接收 JSON 的控制器(已更新 - 尝试返回 TimeLog 对象,仍然是 404)

[Produces("application/json")]
[Route("api/[controller]")]
public class WorkingTimeController : Controller
{
    [HttpGet("[action]")]
    public IEnumerable<string> WorkingTime()
    {
        return new string[] { "value1", "value2" };
    }

    [HttpPost]
    public TimeLog SaveWorkingTime([FromBody] TimeLog time)
    {
        return time;
    }
}
public class TimeLog
{
    public string Comment { get; set; }
    public string Date { get; set; }
    public string Time { get; set; }
}

正如我之前提到的,我在尝试获取 WorkingTime() 时得到 200 OK

这个 GET 请求工作正常

   fetch('api/WorkingTime/WorkingTime')
    .then(response => response.json())
    .then(data => {
        this.setState({ msg: data }); 
    });

这些是我需要发送的有效载荷数据: Screenshot from console

谁能告诉我问题出在哪里?我们将不胜感激。

【问题讨论】:

  • SaveWorkingTime 不应返回 void。
  • 问题是我试图返回 TimeLog 对象,ActionResult,似乎没有任何帮助,仍然无法命中该方法内的断点
  • 我注意到您在发布操作时返回 void。您是否尝试过退货?
  • 从 url 中删除 SaveWorkingTime 或将 [Route("SaveWorkingTime")] 添加到您的操作中。

标签: c# json reactjs api asp.net-core


【解决方案1】:
[HttpPost]
[Route("SaveWorkingTime")]
public IHttpActionResult SaveWorkingTime([FromBody] TimeLog time)
{
    // Perform saving
    return Ok(time);
}

添加了 Route 以便我可以访问该 Post 方法。 api/WorkingTime/SaveWorkingTime 并且有效。通过 Postman 测试。

参考:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing#routing-basics

【讨论】:

  • 好吧,你的回答在一定程度上有所帮助,我可以在这个方法中打断点,但是我的 TimeLog 对象是 null + 我认为你不能返回 OK - 你必须返回 TimeLog 对象否则你会得到一个错误。
  • 您可以退回任何您喜欢的东西。由于状态码,我通常会返回一些IHttpActionResult。我不确定该超级代理是如何工作的,但是使用 axios 我只是 axios.post(route,object),我可以轻松地捕获该对象并将其解析为 TimeLog。尝试使用邮递员发送一些与您的 TimeLog 匹配的对象,如果可行,则您的发布请求无效。
  • 好的,抱歉,我尝试清理和重建解决方案,它有所帮助。谢谢先生,您的答案在写之前的评论时已更改。祝你有美好的一天
  • 谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2016-03-09
  • 2015-09-25
相关资源
最近更新 更多