我的网络服务使用asp.net web api。目前我的api控制器没有做任何事情,因为我想查看帖子以了解我在这里工作的内容。
您会注意到我已发布到localhost。这是因为目前我只在调试器中运行服务应用程序,以便我可以通过Watch检查帖子。
我的问题是,我的帖子似乎无处可去。当我从网页提交表单时,我在 Post void上设置的断点永远不会被点击。
我是否误解了这应该如何在这里发挥作用?
控制器
public class CashbackController : ApiController
{
// POST api/<controller>
public void Post([FromBody]string value)
{
}
}
客户网页
<form action="http://localhost:49474/api/Cashback" method="post">
<p>
API Key: <input type="text" name="_apikey" /><br />
Receipt No: <input type="text" name="_receipt" /><br />
Purchase Date: <input type="text" name="_date" /><br />
Cashback Total: <input type="text" name="_cashback" />
</p>
</form>
<p><input type="submit" value="Submit" /></p>
<script>
$(document).ready(function() {
alert("JQuery works");
});
$("input[type=submit]").on("click", function () {
$("form").submit();
});
$("form").submit(function () {
$.post($(this).attr("action"), $(this).serialize(), function(data) {
if (!data.IsOK) {
alert("Error: " + data.Error);
}
else
{
alert("Post successful.");
}
return;
});
return false;
});
</script>
编辑
使用小提琴手进行检查,看起来好像我点击提交按钮正在做任何事情......
正确引用jquery和fiddler抓住了这个:
POST http://localhost:49474/api/Cashback HTTP / 1.1
主持人:localhost:49474
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:36.0)Gecko / 20100101 Firefox / 36.0
接受: /
Accept-Language:en-GB,en; q = 0.5
Accept-Encoding:gzip,deflate
DNT:1
内容类型:application / x-www-form-urlencoded;字符集= UTF-8
推荐人:http://localhost/servicepost/
内容长度:85
来源:http://localhost
连接:保持活力
Pragma:no-cache
缓存控制:无缓存_apikey = ABCDEFGHIJKLMNOPQRSTUVWXYZ&安培; _receipt = 1234567890&安培; _date = 2015年3月31日&安培; _cashback = 100
但是,在我的控制器中,值仍为空
答案 0 :(得分:0)
Mkay所以这里有一些问题......
首先,我没有引用正确的jquery源 注意:只能使用the googleapis link(这个是jquery 2.1.3.min)或其他您认为合适的链接。它更简单
其次,我的控制器没有接受正确的类型。现在这是我真的感到困惑的地方,因为客户端应用程序不知道我的api使用的模型。
事实证明,这只是在客户端应用上镜像模型的问题。请考虑以下
public class UserController : ApiController
{
// POST api/<controller>
public void Post([FromBody]User Value)
{
}
}
public class User
{
public int ID { get; set; }
public string Username { get; set; }
public string EmailAddress { get; set; }
}
表单必须发布模型的镜像,在这种情况下看起来像这样:
<form method="post" action="path-to-service/api/User">
<div>
Username: <input type="text" name="Username" /><br />
Email Address: <input type="text" name="EmailAddress" />
</div>
</form>
上面的ajax帖子可以使用,但需要进行修改才能完全符合您的要求。通常我只是在if语句中引入一些错误处理并重定向到else。