如果方法参数为string或int,ASP.NET WebAPI将抛出404
我在ASP.NET MVC4 WebAPI上做了一个非常简单的测试,发现了一些有趣的问题: 当一个方法采用复杂类型时,它会工作,但当它采用字符串或int时,它会抛出404,如屏幕截图所示:“AddProduct”可以工作,但“Test”和“Test1”总是找不到 我应该如何正确调用该方法 试试这个: 该网站由“[FormBody]”接受该值,因此您应该由“={0}”发布 ({0}被字符串数据替换) 另见此答案: 你试过了吗如果方法参数为string或int,ASP.NET WebAPI将抛出404,asp.net,asp.net-mvc-4,asp.net-web-api,Asp.net,Asp.net Mvc 4,Asp.net Web Api,我在ASP.NET MVC4 WebAPI上做了一个非常简单的测试,发现了一些有趣的问题: 当一个方法采用复杂类型时,它会工作,但当它采用字符串或int时,它会抛出404,如屏幕截图所示:“AddProduct”可以工作,但“Test”和“Test1”总是找不到 我应该如何正确调用该方法 试试这个: 该网站由“[FormBody]”接受该值,因此您应该由“={0}”发布 ({0}被字符串数据替换) 另见此答案: 你试过了吗 $.ajax({ url : "/api/product/tes
$.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对象(在jQueryAjax方法中)包装在引号中
尝试不引用,让我知道
而且
当测试字符串username和int value这样的单变量时,请注意WebAPI期望的正是这样
这家伙
[HttpPost]
public string Test1(int value) { ... }
将查找与此url签名匹配的帖子(im使用HTTPIE)
$http POST值=1
其中“4”是Test1方法中变量“value”的值
有关HTTPIE的更多信息,请点击此处:
希望有帮助 您需要用[FromBody]属性修饰字符串或int参数 [HttpPost] 公共字符串测试([FromBody]字符串用户名) [HttpPost] 公共int Test1([FromBody]int值)
我搜索了将近一天,因为我希望我的数据是JSON,所以假设您需要在这里发布一个值: INT: 串
$.post('api/mywebmethod', { "": "10" });
控制器
[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
使用
路线
[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我发现只要更改方法参数,添加[FromBody],就可以了。比如:公共字符串Foo([FromBody]stringpara1)。无论如何,感谢您的回答~That=symbol是一个问题,特别是对于最新版本的Web API 2,始终需要记住您是否正在向Web API 2控制器操作发送JSON字符串,并且您有[FromBody]参数属性然后您需要将=符号添加到JSON的开头,例如,在客户端ajax调用中,您需要将=符号连接到正在发布的数据的开头
[HttpPost]
public IHttpActionResult MyWebMethod([FromBody]int id)
{
//do work
}
[RoutePrefix("api/Product")]
public class ProductController:ApiController
{
[Route("Add"),HttpPost]
public string AddProduct(Product productModel)
[Route("Test"),HttpPost]
public string Test(string userName){}
}