我对ASP.NET MVC4 WebAPI做了一个非常简单的测试,发现了一些有趣的问题:
当一个方法采用复杂类型时,它会起作用,但当它采用string或int时,它将抛出404,如给出的屏幕截图:“AddProduct”有效,但“Test”和“Test1”总是没找到。
我应该如何正确调用该方法?
答案 0 :(得分:18)
您需要使用[FromBody]属性修饰string或int参数。
[HttpPost] public string Test([FromBody] string username)
[HttpPost] public int Test1([FromBody] int value)
答案 1 :(得分: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
答案 2 :(得分: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方法中)。
尝试不加引号,让我知道!
另外,
当测试单个变量(如string username和int value)时,请注意WEB API将完全相同。
这家伙,
[HttpPost]
public string Test1(int value) { ... }
将查找与此网址签名相匹配的帖子(即时使用HTTPIE)...
$ http POST http://yourwebsite.com/api/test1 value = 1
其中“4”是Test1方法中变量“value”的值。
有关HTTPIE的更多信息,请访问:Scott Hanselman on installing HTTPIE
希望有所帮助!
答案 3 :(得分:0)
我搜索了将近一天的时间,因为我希望我的数据是JSON,所以假设你需要在这里发布一个值,那就是:
INT:
$.post('/api/mywebmethod', { "": 10 })
STRING
$.post('api/mywebmethod', { "": "10" });
CONTROLLER
[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
答案 4 :(得分: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