0

我是 asp.net Web API 的新手,所以如果这是一个愚蠢的问题,请直言,我无法向方法发送值。代码如下,在 WebApiConfig

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{value}",
            defaults: new { value = RouteParameter.Optional }
        );

在控制器内部我有一个方法

[AcceptVerbs("GET")]
    [ActionName("Test")]
    public string Test([FromBody]string value)
    {
        return value;
    }

在javascript里面我在做$ .ajax,用

url: "WebApi2/api/FormsDesinger/Test"

data:"{'value':'Some Value'}"

每当我进行 ajax 调用时,都会调用该方法,但“值”为空。谁能让我知道我做错了什么

4

3 回答 3

1
  • HTTPGET请求不包含body. 并且您的value 参数是使用该[FromBody]属性绑定的。

    更改您的[AcceptVerbs]属性以接受POST并更改您的 Ajax 请求POST(如果不是现在)。

  • WebApi 期望正文中的原语被编码为=value(没有“密钥”)。所以你需要相应地改变你的 Ajax 请求:

    data: "=" + value

于 2013-05-08T12:23:49.923 回答
0

根据另一个答案中的讨论(我实际上希望对您的问题进行分类),可以尝试一些事情:

  1. 您的路线是"api/{controller}/{action}/{value}" 控制器,Test但操作也是Test- 尝试发布到此 url:/EnterpriseConsole/BPMUITemplates/Default/NextGenForms/WebApi2/api/FormsDesinger‌​/Test/Test(Test最后注意加倍)

  2. 向 Route 模板添加约束以仅支持 POST 并从 AcceptVerbs 中删除 GET constraints: new { httpMethod = new HttpMethodConstraint("GET") }(在您的默认值之后)

  3. 从路由模板中删除该{action}位,看看是否会改变

  4. 在此处发布您更新的控制器代码

于 2013-05-08T19:32:36.333 回答
0

实际上通过跟踪和错误方法找到了解决方案,但仍在寻找答案,为什么它首先不起作用。工作代码在这里。

方法:

[AcceptVerbs("POST", "GET")]
    [ActionName("Test1")]
    public string Test(string id)
    {
        return id;
    }

WebApiConfig:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}"
        );

$.ajax我将 id 作为 url 的一部分传递时, url:"WebApi2/api/FormsDesinger/Test1?id=123", data:null

这是工作正常,但我仍然想实现传递值作为datain的一部分$.ajax

伙计们,请随时发表评论,我也准备尝试其他替代方案。

于 2013-05-10T11:54:29.343 回答