我是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中我正在使用
进行$ .ajaxurl: "WebApi2/api/FormsDesinger/Test"
data:"{'value':'Some Value'}"
每当我执行ajax调用时,都会调用该方法,但“value”为null。 任何人都可以让我知道我做错了什么
答案 0 :(得分:1)
HTTP GET
请求不包含body
。和你的value
参数使用[FromBody]
属性绑定。
将您的[AcceptVerbs]
属性更改为接受POST
并进行更改
您对POST
的Ajax请求(如果现在不是)。
WebApi期望正文中的基元编码为=value
(没有'key')。所以你需要相应地改变你的Ajax请求:
data: "=" + value
答案 1 :(得分:0)
基于其他答案(我实际上希望对您的问题进行排序)中的讨论,可以尝试以下几点:
您的路线是"api/{controller}/{action}/{value}"
控制器为Test
,但操作也是Test
- 请尝试POST到此网址:
/ EnterpriseConsole / BPMUITemplates /默认/ NextGenForms / WebApi2 / API / FormsDesinger /测试/测试
(注意最后加倍Test
)
向Route模板添加约束以仅支持POST并从AcceptVerbs中删除GET
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
(在您的默认设置之后)
从路线模板中删除{action}
位,看看是否有所改变
在此处发布您更新的控制器代码
答案 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}}。
伙计们,请随时发表评论,我也准备尝试其他替代方案。