【发布时间】:2012-11-29 12:24:16
【问题描述】:
我在 ASP.NET MVC4 WebAPI 上做了一个非常简单的测试,发现了一些有趣的问题:
当一个方法采用复杂类型时,它会工作,但当它采用 string 或 int 时,它会抛出 404,如给出的屏幕截图:“AddProduct”工作,但“Test”和“Test1”总是没找到。
我应该如何正确调用该方法?
【问题讨论】:
标签: asp.net asp.net-mvc-4 asp.net-web-api
我在 ASP.NET MVC4 WebAPI 上做了一个非常简单的测试,发现了一些有趣的问题:
当一个方法采用复杂类型时,它会工作,但当它采用 string 或 int 时,它会抛出 404,如给出的屏幕截图:“AddProduct”工作,但“Test”和“Test1”总是没找到。
我应该如何正确调用该方法?
【问题讨论】:
标签: asp.net asp.net-mvc-4 asp.net-web-api
您需要使用 [FromBody] 属性来装饰您的字符串或 int 参数。
[HttpPost] 公共字符串测试([FromBody]字符串用户名)
[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 value=1
其中“4”是该 Test1 方法中变量“value”的值。
在此处了解有关 HTTPIE 的更多信息:Scott Hanselman on installing HTTPIE
希望有帮助!
【讨论】:
我为此搜索了将近一天,因为我希望我的数据是 JSON,所以假设您需要在此处发布一个值:
情报:
$.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
【讨论】: