C# Web Api 调用未从 jquery 调用
Posted
技术标签:
【中文标题】C# Web Api 调用未从 jquery 调用【英文标题】:C# Web Api call is not invoking from jquery 【发布时间】:2019-06-14 05:51:55 【问题描述】:我正在从 jQuery 脚本调用 POST
web-api
,但数据未绑定。 Page
是 null
jQuery
$("document").ready(function()
myTimer= setInterval( "StartTimer()", 1000);
);
function StartTimer()
$.ajax(
type: 'POST',
contentType: "application/x-www-form-urlencoded",
url: "/api/sitehit/LogHit/", //method Name
data: 'Page=test' ,
dataType: 'text/plain',
error: function (msg)
alert(msg.responsetext);
).fail(function ()
alert("error logging hit");
).success(function ()
alert("success logging hit");
);
clearInterval(myTimer);
C# 代码
public class SiteHitController : ApiController
[HttpPost]
public void LogHit(string Page) // Page not binding
var c= Page; // Page is null
【问题讨论】:
没有帮助。我正在调用API/Controller/Action/StringData
但仍然没有结果
看看***.com/questions/19093603/simple-post-to-web-api..
还要确保您的路由设置正确,因为没有为方法指定路由属性...
【参考方案1】:
控制器中没有为/api/sitehit/LogHit
设置路由。 ApiController 的工作方式与常规 MVC 控制器不同。除非您指定,否则操作的名称不是端点的路由。
您可以将路由属性添加到控制器操作。
[Route("LogHit")]
[HttpPost]
public void LogHit(string Page)
或者(假设控制器上没有其他 HttpPost 方法)将jQuery
url 更改为url: '/api/sitehit'
。
有多种方法可以绑定数据,具体取决于您要发送的内容类型。假设您想使用 JSON,您可以执行以下操作。
创建要绑定的模型并将[FromBody]
添加到控制器操作参数中:
public class MyModelDto
public string Page get; set;
[Route("LogHit")]
[HttpPost]
public void LogHit([FromBody] MyModelDto model) // add FromBody here
// model.Page will contain "test"
然后通过使用JSON.stringify()
对数据进行字符串化,确保您在 ajax 调用中发送 JSON。
$.ajax(
type: 'POST',
contentType: "application/json",
url: "/api/sitehit/LogHit",
data: JSON.stringify(Page: 'test'), // use JSON.stringify()
dataType: 'json',
success: function (data)
// can use response data here
alert("success logging hit");
,
error: function (msg)
alert(msg.responsetext);
);
这应该现在正确绑定到您的控制器。
如果您要发送表单数据x-www-form-urlencoded
,请改用[FromForm]
,您不需要使用JSON.stringify()
,但在这种情况下,参数应以查询字符串形式发送:page=test&prop2=test2
。
希望这会有所帮助。
【讨论】:
如何绑定,请分享完整信息而不是部分信息。我现在正在使用`contentType:“application/x-www-form-urlencoded”,url:“/api/sitehit/LogHit/”`,现在它的命中但数据没有绑定 @Sujoy 更新了答案。有多种绑定方式,具体取决于内容类型。对于 JSON,使用[FromBody]
,如果是表单数据,则使用 [FromForm]
。
你为什么要把事情复杂化。我只想将它绑定为字符串,因为我的控制器操作接受字符串。此外,这不是路由问题,因为我的代码可以很好地使用整数参数。
当然每个人都知道这是可能的,但问题是“如何”。你的回答不够充分。我修改了问题,你可以再试一次。
谢谢,我没有要求不同的方式。我一直在寻找最简单的方法,可能是字符串。我自己找到了一个简单的方法。【参考方案2】:
以下代码有效:
$.ajax(
type: 'POST',
//contentType: "application/json; charset=utf-8",
url: "/api/sitehit/LogHit?Page=" + window.location.href,
//dataType: 'json',
error: function (msg)
alert(msg.responsetext);
);
【讨论】:
以上是关于C# Web Api 调用未从 jquery 调用的主要内容,如果未能解决你的问题,请参考以下文章
服务器未从 restkit 的 web 服务调用接收正文对象
API Gateway v2 未从 OPTIONS 调用返回 CORS 标头
调用 Selector 方法时未从 Superview 中删除视图