Web Api Controller将值传递给方法

时间:2013-05-08 12:16:01

标签: asp.net-web-api

我是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调用时,都会调用该方法,但“value”为null。 任何人都可以让我知道我做错了什么

3 个答案:

答案 0 :(得分:1)

  • HTTP GET请求不包含body。和你的value 参数使用[FromBody]属性绑定。

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

  • WebApi期望正文中的基元编码为=value(没有'key')。所以你需要相应地改变你的Ajax请求:

    data: "=" + value

答案 1 :(得分:0)

基于其他答案(我实际上希望对您的问题进行排序)中的讨论,可以尝试以下几点:

  1. 您的路线是"api/{controller}/{action}/{value}" 控制器为Test,但操作也是Test - 请尝试POST到此网址: / EnterpriseConsole / BPMUITemplates /默认/ NextGenForms / WebApi2 / API / FormsDesinger /测试/测试 (注意最后加倍Test

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

  3. 从路线模板中删除{action}位,看看是否有所改变

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

答案 2 :(得分: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

这是正常的,但我仍然希望在data $.ajax中实现传递值。{{1}}。

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