【问题标题】:Why does calling a webapi post method throws error: no controller found?为什么调用 web api post 方法会抛出错误:找不到控制器?
【发布时间】:2018-02-14 21:11:10
【问题描述】:

我已经构建了一个简单的 asp.net 项目,其中包含一个 webapi。我还有一个 html 页面,它向 webApi 发送 POST 请求,但它不能。它抛出错误

找不到与名为“api”的控制器匹配的类型。

代码:

WebApi:

namespace HimHer.Controllers
{
    public class ImagesController : ApiController
    {
        basicoperations bo = new basicoperations();

        public string Post([FromBody]Images imgs)
        {

            bo.Image = imgs.Image;
            bo.Story = imgs.Story;

            bool result = bo.insertImages(bo);

            return result == true ? "Success" : "Failed";
        }
    }

    public class Images
    {
        public int ID  {get; set;}
        public string Image { get; set; }
        public string Story { get; set; }
    }
}

Ajax 代码:

function save()
{
  var images = {
      Image: imgUploader.value,
      Story: txtStory.value
  };

  var JsonImages = JSON.stringify(images);

  $.ajax
  ({
      url: '/api/Images',
      type: 'POST',
      contentType: "application/json; charset= utf-8",
      data: JsonImages,
      dataType: 'json',
      success: function (results) {
          alert(results);
          $('#myModal').modal('hide');
      }
  });
}

ImagesController 存在于 Controllers 文件夹中。

【问题讨论】:

  • contentType: "application/json; charset= utf-8",。在这里,您告诉 ajax 和服务器您正在发送 JSON。 var JsonImages = JSON.stringify(images); 在这里您将数据转换为单个字符串,因此它不再是 JSON。我认为第二行是不必要的。
  • 以上内容与您所说的问题没有直接关系,但我怀疑以后可能会证明是一个问题。同时尝试api/Images(不带前导/),看看这是否有助于实际路径。并在您的网络选项卡中查看为请求生成的完整 URL 是否与您的 API 的正确 URL 匹配。
  • 完成。我还认为您的响应可能有问题,因为您说的是dataType: "json",但是 API 方法返回的是字符串而不是对象。
  • 您的回答“这有效(...)”已被审核过程删除,因为它看起来不像是答案,而是像您的问题的一些附加信息。您可能需要重新输入您的答案并添加一些解释,以便它清楚地作为答案脱颖而出。

标签: jquery ajax post c#-4.0 asp.net-web-api


【解决方案1】:

改用api/Images(不带前导/)看看这是否有助于实际路径。然后在您的网络选项卡中查看为请求生成的完整 URL 是否与您的 API 的正确 URL 匹配。

【讨论】:

  • 谢谢,但实际上这是有效的 url:'/Images/post',你还是给了我一个领导
  • 啊好的。根据您的路由配置,它会有所不同。
  • GlobalConfiguration.Configuration.Routes.MapHttpRoute ("Default", "{controller}/{id}", new { id = RouteParameter.Optional } );
  • 虽然路由配置没有提到动作
猜你喜欢
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
相关资源
最近更新 更多