Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果方法参数为string或int,ASP.NET WebAPI将抛出404_Asp.net_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

如果方法参数为string或int,ASP.NET WebAPI将抛出404

如果方法参数为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

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

当一个方法采用复杂类型时,它会工作,但当它采用字符串或int时,它会抛出404,如屏幕截图所示:“AddProduct”可以工作,但“Test”和“Test1”总是找不到

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

试试这个:

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

另见此答案: 你试过了吗

$.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){}
}