7

我对 ASP.NET MVC4 WebAPI 做了一个非常简单的测试,发现了一些有趣的问题:

当一个方法采用复杂类型时,它会起作用,但是当它采用 string 或 int 时,它会抛出 404,如给出的屏幕截图:“AddProduct”有效,但始终找不到“Test”和“Test1”。

我应该如何正确调用该方法?

Web API 代码

调用测试方法时出现 404

我的路线配置

4

5 回答 5

18

您需要使用 [FromBody] 属性来装饰您的字符串或 int 参数。

[HttpPost] public string Test([FromBody]string username)

[HttpPost] public int Test1([FromBody]int value)

于 2014-03-26T19:13:25.060 回答
4

尝试这个:

该网站接受“[FormBody]”的值,因此您应该由“={0}”发布({0} 被您的字符串数据替换)

$.ajax({
    url: "api/values",
    data: "='hello world'",
    dataType: "text",
    type: "POST",
    success: function (data) {
        $("#result").val(data);
    },
    fail: function (data) {
        alert(data);
    }
});

另请参阅此答案: POST a string to Web API controller in ASP.NET 4.5 and VS 2012 RC

于 2012-11-29T14:45:47.680 回答
2

你有没有尝试过,

$.ajax({
  url : "/api/product/test",
  data : { username : "edi" },
  dataType : "json",
  type : "POST",
  success : function(res){ console.log(res); },
  error : function(req, stat, err){ console.log(stat + ": " + err); }
});

现在它失败了,因为您已将整个 json 对象(在 jquery ajax 方法中)用引号括起来。

不带引号试试,让我知道!

还,

在测试字符串用户名和 int 值等单个变量时,请注意 WEB API 会期望它完全一样。

这家伙,

[HttpPost]
public string Test1(int value) { ... }

将寻找与此 url 签名匹配的帖子(我使用 HTTPIE)...

$ http POST http://yourwebsite.com/api/test1值=1

其中“4”是该 Test1 方法中变量“value”的值。

更多关于 HTTPIE 的信息:Scott Hanselman 关于安装 HTTPIE

希望有帮助!

于 2012-11-29T14:46:33.713 回答
0

我为此搜索了将近一天,因为我希望我的数据是 JSON,所以假设您需要在这里发布一个值:

INT:

$.post('/api/mywebmethod', { "": 10 })

细绳

$.post('api/mywebmethod', { "": "10" });

控制器

[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
于 2017-08-09T07:05:02.867 回答
0

使用Route

[RoutePrefix("api/Product")]
public class ProductController:ApiController
{
[Route("Add"),HttpPost]
public string AddProduct(Product productModel)

[Route("Test"),HttpPost]
public string Test(string userName){}
}

调用: localhost:xx//api/product/Add

于 2017-08-09T07:14:22.900 回答