Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# $.ajax对ServiceStack webservice的POST调用,参数未到达_C#_Javascript_Ajax_Json_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Javascript,Ajax,Json,servicestack" /> servicestack,C#,Javascript,Ajax,Json,servicestack" />

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

C# $.ajax对ServiceStack webservice的POST调用,参数未到达,c#,javascript,ajax,json,servicestack,C#,Javascript,Ajax,Json,servicestack,我试图学习如何使用ServiceStack编程web服务,并在JavaScript中通过ajax调用它。我是通过观看pluralsight电影来实现这一点的,我想我几乎明白了如何做到这一点,除了通过服务调用将数据作为参数传递之外 我尝试通过以下ajax调用调用服务: var request = { }; request.Amount = 32; $.ajax({ type: 'POST', contentType: 'application/jsonp; ch

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

我尝试通过以下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服务调用中做了一些错误的事情,但我不知道是什么。所以我想知道我做错了什么。

你不能用JsonP发表文章。如果您试图进行跨域发布,您需要查看cors,并确保已为您发布到的服务启用该功能


您不能使用JsonP发布帖子。如果您试图进行跨域发布,您需要查看cors,并确保已为您发布到的服务启用该功能


我之所以使用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部分之后尝试了两个URL:/json/reply/Entry和/Entry,但都不起作用。那么,我做错了什么呢?

我之所以使用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部分之后尝试了两个URL:/json/reply/Entry和/Entry,但都不起作用。那么,我做错了什么呢?

这里是《多元视野》课程的作者。希望我能帮助你

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

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

假设URL是正确的,您只需将数据包装在JSON.Stringify()中。 当您进行post时,数据必须是JSON格式的JSON字符串。您当前正在发送一个JSON对象


此外,您很可能可以在$.ajax调用中删除url中的localhost位,只需在此处执行“entry”

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

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

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

假设URL是正确的,您只需将数据包装在JSON.Stringify()中。 当您进行post时,数据必须是JSON格式的JSON字符串。您当前正在发送一个JSON对象


另外,您很可能可以在$.ajax调用中删除url中的localhost位,只需执行“entry”

您是否将服务设置为与jQuery的JSONP兼容?您知道回调处理程序有一个特定的名称等。有两件事需要尝试:1)尝试将数据:{request:request}更改为数据:request 2)如果需要jsonp add SetConfig(new EndpointHostConfig{AllowJsonpRequests=true});对于您的AppHost()(作为对您删除的答案的回复),您可能把事情弄得太复杂了?你想做的事情一点也不复杂。我会回到旧技术,尝试asmx或page方法。它们与jQuery一起工作。顺便说一句,web服务不需要其他端口。可能有帮助,也可能没有帮助。您是否将服务设置为与jQuery的JSONP兼容?您知道回调处理程序有一个特定的名称等。有两件事需要尝试:1)尝试将数据:{request:request}更改为数据:request 2)如果需要jsonp add SetConfig(new EndpointHostConfig{AllowJsonpRequests=true});对于您的AppHost()(作为对您删除的答案的回复),您可能把事情弄得太复杂了?你想做的事情一点也不复杂。我会回到旧技术,尝试asmx或page方法。它们与jQuery一起工作。顺便说一句,web服务不需要其他端口。可能有帮助,也可能没有帮助。我发现jsonp选项是一种解决方案,可以从ajax的成功回调中根本不获取任何警报。这就是我将json更改为jsonp的原因。如果我把它改回json,我根本看不到警报。我没有很多关于web服务的经验,所以我不知道我是否在尝试跨域发布。我想要的是一个web服务,我可以用参数调用它,可以用这些参数做一些事情,然后根据参数或消息从web服务返回一个答案,不管情况需要什么。那么,如果您试图连接到另一个域上的服务呢(当您的Web服务没有您试图连接的内容作为同一url域的一部分时)您需要使cors能够正确地进行跨域ajaxing。您能告诉我您使用的是哪种设置(您使用的是哪种Web服务)吗