【问题标题】:How to send JSON to a Web API?如何将 JSON 发送到 Web API?
【发布时间】:2017-04-07 02:03:21
【问题描述】:

我正在使用 Web API 创建一个网站,我尝试将 JSON 发送到我的控制器,但这是我不断收到的错误。

 Multiple actions were found that match the request:
 Post on type AuctionWebsiteASP.Controllers.MovesController
 readDatabase on type AuctionWebsiteASP.Controllers.MovesController
 newItem on type AuctionWebsiteASP.Controllers.MovesController

首先我尝试搜索修复,但这里的修复都没有帮助。

我的控制器

public class MovesController : ApiController
{
    [AcceptVerbs("GET", "POST")]
    public HttpResponseMessage Post([FromBody] Product product)
    {
        products.Add(product);
        newItem();
        return Request.CreateResponse(HttpStatusCode.OK, product);
    }
 }

我的 JS

$.ajax({
    type: "POST",
    dataType: "json",
    url: "/api/moves/",
    data: source,
    success: function (data) {
        $("#nStart").val(null);
        $("#nImg").val(null);
        $("#nMaker").val(null);
        $("#nModel").val(null);
        $("#nSerial").val(null);
        $("#nCpu").val(null);
        $("#nRam").val(null);
        $("#nGpu").val(null);
        $("#nStorage").val(null);
        $("#nBattery").val(null);
        $("#nDrivers").val(null);
        $("#nAccessories").val(null);
        $("#nNotes").val(null);
        console.log("Data has been sent!");
    },
    error: function (error) {
        jsonValue = jQuery.parseJSON(error.responseText);
        alert("ERROR!");
    }
});

提前致谢!

【问题讨论】:

  • public HttpResponseMessage Post([FromBody] Product product) 是控制器中的唯一方法吗?
  • 不,我没有尝试使用 Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } 并将操作添加到 url 但没有帮助。

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


【解决方案1】:

你的路线大概是这样的

routes.MapHttpRoute(
  name: "API Default",
  routeTemplate: "api/{controller}/{id}",
  defaults: new { id = RouteParameter.Optional }); 

但是为了使用相同的 http 方法进行多个操作,您需要通过如下路径向 webapi 提供更多信息:

routes.MapHttpRoute(
  name: "API Default",
  routeTemplate: "api/{controller}/{action}/{id}",
  defaults: new { id = RouteParameter.Optional });

尝试使用Route属性来区分每个动作例如

 public class MovesController : ApiController
 {
     [Route("Product")]
     public HttpResponseMessage Post([FromBody] Product product)
     {
         products.Add(product);
         newItem();
         return Request.CreateResponse(HttpStatusCode.OK, product);
     }
  }

$.ajax({ type: "POST", dataType: "json", url: "/api/moves/product", data: source, success: function (data) { $("#nStart").val(null); $("#nImg").val(null); $("#nMaker").val(null); $("#nModel").val(null); $("#nSerial").val(null); $("#nCpu").val(null); $("#nRam").val(null); $("#nGpu").val(null); $("#nStorage").val(null); $("#nBattery").val(null); $("#nDrivers").val(null); $("#nAccessories").val(null); $("#nNotes").val(null); console.log("Data has been sent!"); }, error: function (error) { jsonValue = jQuery.parseJSON(error.responseText); alert("ERROR!"); } });

【讨论】:

  • 然后尝试使用Route属性
  • [Route("Product")] 的命名空间是什么?
  • 安装包属性路由(用于 MVC)
  • 安装包AttributeRouting.WebApi(用于Web API)
  • 我正在使用 ajax 在控制器中调用我的 post 方法。我应该用什么?
猜你喜欢
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多