我对 ASP.NET MVC4 WebAPI 做了一个非常简单的测试,发现了一些有趣的问题:
当一个方法采用复杂类型时,它会起作用,但是当它采用 string 或 int 时,它会抛出 404,如给出的屏幕截图:“AddProduct”有效,但始终找不到“Test”和“Test1”。
我应该如何正确调用该方法?
我对 ASP.NET MVC4 WebAPI 做了一个非常简单的测试,发现了一些有趣的问题:
当一个方法采用复杂类型时,它会起作用,但是当它采用 string 或 int 时,它会抛出 404,如给出的屏幕截图:“AddProduct”有效,但始终找不到“Test”和“Test1”。
我应该如何正确调用该方法?
您需要使用 [FromBody] 属性来装饰您的字符串或 int 参数。
[HttpPost] public string Test([FromBody]string username)
[HttpPost] public int Test1([FromBody]int value)
尝试这个:
该网站接受“[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
你有没有尝试过,
$.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
希望有帮助!
我为此搜索了将近一天,因为我希望我的数据是 JSON,所以假设您需要在这里发布一个值:
INT:
$.post('/api/mywebmethod', { "": 10 })
细绳
$.post('api/mywebmethod', { "": "10" });
控制器
[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
使用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