从客户端发送POST时,Web服务没有响应

时间:2015-03-31 09:50:42

标签: asp.net asp.net-web-api

我的网络服务使用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

但是,在我的控制器中,仍为空

1 个答案:

答案 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。