【问题标题】:Web API 2 looks for get when using ajax post?Web API 2 在使用 ajax post 时寻找 get 吗?
【发布时间】:2017-07-26 03:15:54
【问题描述】:

我有这个 AJAX 调用:

 let errorModel = {
            exception: exception,
            extraMessage: extraMessage,
            time: Date.now()
        }
            $.ajax({
            url: "/api/error/LogError",
            type: "POST",
            data: errorModel
        });

这个控制器中的这个 web api 2 方法

 [RoutePrefix("api/Error")]
public class ErrorController : ApiController
{

[HttpPost]
    [Route("LogError")]
    public IHttpActionResult LogError([FromBody]ErrorModel errorModel)
    {

        try
        {
            _db.ErrorModels.Add(errorModel);
            _db.SaveChanges();
            return Created(new Uri(Request.RequestUri + "/" + errorModel.Id), errorModel);

        }
        catch (Exception e)
        {
            return BadRequest(e.Message);
        }
        }
}

但是当我的代码到达 ajax 调用时,我收到如下错误消息:

{
  "message": "The requested resource does not support http method 'GET'."
}

我在这里做错了什么?我有很多这样的 api 调用,它们都可以工作。

【问题讨论】:

  • 某处正在发送 GET。也许有一个表格,你没有阻止默认提交,或者什么?显然你发布的代码是不负责任的,但其他的是。
  • 我投票结束这个问题,因为它是由代码中不相关的问题引起的(请参阅自我回答)。
  • type 是错误的字段 IIRC。无论如何,你可以使用$.post

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


【解决方案1】:

我已经测试了这段代码,发现它运行良好。

您发布的错误消息似乎表明您在 ajax 中使用了 'get' 方法而不是 'post' 方法。

我从流行的 REST 客户端“邮递员”中找到了结果。

注意:我对 ErrorModel 的所有属性都使用了字符串数据类型

【讨论】:

    【解决方案2】:

    大家好,很抱歉耽误了您的时间,这似乎是我这边的一个愚蠢错误,似乎我的 javascript Date.Now() 没有返回我所期望的,并且 api 方法将其作为 00/00/0001 接收被 SQL 服务器拒绝。 我不确定为什么错误消息说的是什么,但是在我通过在 api 调用中设置日期时间来修复它之后,错误自行解决了。 感谢大家的宝贵时间

    【讨论】:

    • 当您使用 REST API 的从不信任客户端应用程序时。您可以从 c# 本身获取日期时间,即如果您没有从用户那里获取时间。但是在调用 API 时需要时间。干杯:)
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2015-10-08
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多