美元.ajax POST调用ServiceStack webservice,参数未到达

本文关键字:参数 webservice ajax POST 调用 ServiceStack 美元 | 更新日期: 2023-09-27 18:17:29

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

我尝试用这个ajax-call调用服务:

  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服务调用中做错了什么,但我不知道是什么。我想知道我在这里做错了什么

美元.ajax POST调用ServiceStack webservice,参数未到达

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

你应该做的第一件事是确保API工作正常。

转到此:http://localhost:1879/entry在您的web浏览器中,您应该看到显示了一个包含有关该服务的信息的页面。如果你不这样做,你的URL是错误的或ServiceStack配置错误。

假设URL是正确的,您所需要做的就是将数据包装在JSON.Stringify()中。当你写一篇文章时,数据必须是JSON格式的JSON字符串。您当前正在发送一个JSON对象。

另外,很可能您可以在$. url中去掉localhost位。Ajax调用,只做"entry"

你不能用JsonP写文章。如果您尝试跨域POST,您需要查看cors并确保您要发送到的服务已启用。

Post data to JsonP

我只使用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"answers"错误请求"。

我搜索了这些错误,并尝试了,但没有一个可能的解决方案,我发现解决了我的问题。我尝试了2个url:/json/reply/Entry和/Entry后的localhost部分,但两者都不起作用。那么我做错了什么呢?