2015-03-31 132 views
0

我的web服务使用asp.net web api。目前我的api控制器没有做任何事情,因为我想检查这个帖子,看看我在这里工作。从客户端发送POST时Web服务没有响应

你会注意到我正在发布到本地主机。这是因为目前我只在调试器中运行服务应用程序,以便我可以通过Watch查看帖子。

我的问题是,它似乎不像我的帖子是去任何地方。当我从网页提交表单时,我在虚拟空间中设置的断点永远不会受到影响。

我误解了这是应该如何在这里工作?

控制器

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和提琴手抓住了这个:

POST http://localhost:49474/api/Cashback HTTP/1.1
主机:本地主机:49474
的User-Agent:Mozilla的/ 5.0(Windows NT的6.1; WOW64; RV:36.0)壁虎/ 20100101火狐/ 36.0
接受:/
接受语言:EN-GB,连接; Q = 0.5
接受编码:gzip,放气
DNT:1
内容 - 类型:application/x-www-form-urlencoded;字符集= UTF-8
的Referer:http://localhost/servicepost/
的Content-Length:85
产地:http://localhost
连接:保持活着
附注:无缓存
缓存控制:无缓存

_apikey = ABCDEFGHIJKLMNOPQRSTUVWXYZ & _receipt = 1234567890 & _date = 2015年3月31日& _cashback = 100

然而,在我的控制器,仍然是空

+0

你可以使用提琴手来解决问题。 – 2015-03-31 09:56:29

+0

我会看看,但我真正想知道的是:我是否正确理解这些东西? – Ortund 2015-03-31 09:59:30

回答

0

Mkay所以有几件事错在这里...

首先,我没有引用正确的jQuery源
注:只有不断使用the googleapis link(这个是jquery 2.1.3.min)或其他你认为合适的链接。这只是更简单

其次,我的控制器不接受正确的类型。现在,这是我真正感到困惑的地方,因为客户端应用程序不会知道我的api使用的是什么模型。

原来,这只是在客户端应用程序中发布到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> 

阿贾克斯后上面会工作,但需要进行修改,以做到你想要的东西。通常我只是在if语句中引入一些错误处理,并将其重定向到else中。