如果method参数是string或int,则ASP.NET WebAPI抛出404

时间:2012-11-29 12:24:17

标签: asp.net asp.net-mvc-4 asp.net-web-api

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

当一个方法采用复杂类型时,它会起作用,但当它采用string或int时,它将抛出404,如给出的屏幕截图:“AddProduct”有效,但“Test”和“Test1”总是没找到。

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

Web API Code

404 when invoking the Test method

my route config

5 个答案:

答案 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