$ .ajax对ServiceStack webservice的POST调用,参数未到达

时间:2013-06-06 21:00:02

标签: c# javascript ajax json servicestack

我正在尝试学习如何使用ServiceStack编写Web服务并通过JavaScript中的ajax调用它。我通过观看复数电影来做到这一点,我想我几乎想出了如何做到这一点,除了通过服务电话传递数据作为参数。

我尝试使用此ajax调用来调用服务:

  var request = { };
  request.Amount = 32;

  $.ajax({ type: 'POST',
           contentType: 'application/jsonp; charset=utf-8',
           url: "http://localhost:1879/entry",
           dataType: 'jsonp',
           data: {request: request},
           success: function(result){
               alert(result.Id);
           }});

服务如下:

public class EntryService : Service
{
    public object Post(Entry request)
    {
        return new EntryResponse() { Id = request.Amount };
    }
}

[Route("/entry", "POST")]
public class Entry
{
    public int Amount { get; set; }
}

public class EntryResponse
{
    public int Id { get; set; }
}

我希望回调中的警报显示数字32,但它显示数字0.当我调试我的服务时,我看到该请求.Amount也是0,所以我认为我在Ajax做错了服务电话,但我无法弄清楚是什么。所以我想知道我在这里做错了什么。

3 个答案:

答案 0 :(得分:2)

这是Pluralsight课程的作者。希望我能帮到你。

首先应该确保API正常运行。

转到此处:http://localhost:1879/entry 在Web浏览器中,您应该看到显示的页面,其中包含有关服务的信息。如果您的URL不正确或ServiceStack配置错误。

假设URL正确,您需要做的就是将数据包装在JSON.Stringify()中。 当您发布帖子时,数据必须是JSON格式的JSON字符串。您当前正在发送JSON对象。

此外,您最有可能在$ .ajax调用中将localhost位从您的网址中删除,只需执行“输入”

答案 1 :(得分:1)

您无法使用JsonP发帖。如果您尝试进行跨域POST,则需要查看cors并确保为您要发布的服务启用了。

Post data to JsonP

答案 2 :(得分:1)

我只使用了jsonp因为我读过并希望它可以解决我的问题。但根据你的解释,我不应该需要它,所以我把我的代码改为:

  var request = { };
  request.Amount = 32;

  $.ajax({ type: 'POST',
           contentType: 'application/json; charset=utf-8',
           url: "http://localhost:1879/json/reply/Entry",
           dataType: 'json',
           data: request,
           success: function(result){
               alert(result.Id);
           },
           error: function(xhr, ajaxOptions, thrownError){
               alert("Failure!");
               alert(xhr.status);
               alert(thrownError);
           }});

首先我没有错误部分进行此调用,没有任何事情发生,没有警报,没有错误,没有。所以我认为错误被消耗而不是被显示,所以我添加了错误回调,我的假设似乎是正确的。现在我收到3个警报,最后2个警报显示“400”和“错误请求”。

我搜索了这些错误并尝试过,但我找不到解决问题的可能解决办法。我在localhost部分尝试了2个url:/ json / reply / Entry和/ entry但两个都没有用。那么我做错了什么?