REST PUT似乎没有连接到服务器

时间:2014-04-29 14:40:49

标签: c# javascript jquery asp.net rest

[解决]

Subir Kumar Sao是完全正确的,这是一个CORS问题而不是客户端,以防其他人通过托管使用C#编码的服务器来解决同样的问题,这将是解决方案:

CORS support for ASP.NET Web API获取程序集并将它们引用到您的服务器项目中,并在HttpSelfHostConfiguration下插入以下内容,最后看起来像这样:

var config = new HttpSelfHostConfiguration ("http://10.0.5.106:8000");

var enableCorsAttribute = new EnableCorsAttribute ("*", "*", "*")
{
    SupportsCredentials = true
};
config.EnableCors (enableCorsAttribute);

[问题]

我使用 KineticJS C#下用 VS2013 编写的服务器,用于托管在画布中的LED-Light控制应用程序>

我使用 Chrome Postman 扩展程序对其进行了测试,它运行完美,我可以GET,我也可以PUT。

因为这是我第一次使用REST编写代码,所以我决定使用来自 jQuery .ajax,这似乎记录得非常好。但由于一些奇怪的原因,它不会工作,而且我很遗憾,因为我可能会错过一些东西,而且我也无法检查自从"错误"是空的。

以下是我在客户端使用的代码:

$.ajax({
    url: 'http://10.0.5.106:8000/api/LED/Save',
    type: 'PUT',
    data: { N: '1', Pos: '10' },
    success: function() { alert('PUT completed'); },
    error: function(req,status,ex){alert(ex);}
});

要了解我的服务器的结构,以下是它的代码:

private static void RestServer()
{
    var config = new HttpSelfHostConfiguration ("http://10.0.5.106:8000");

    config.MapHttpAttributeRoutes ();
    HttpSelfHostServer server = new HttpSelfHostServer (config);
    server.OpenAsync ().Wait ();
    while (true) {
    }
}

[RoutePrefix ("api/LED")]
public class LEDController : ApiController
{
    [Route ("Save")]
    public HttpResponseMessage PutSave(int N, int Pos)
    {
        return Request.CreateResponse (HttpStatusCode.NoContent);
    }

    [Route ("Load")]
    public HttpResponseMessage PutLoad(int N, int Pos)
    {
        return Request.CreateResponse (HttpStatusCode.NoContent);
    }
    [Route ("Intense")]
    public HttpResponseMessage PutInt(int N, int I)
    {
        return Request.CreateResponse (HttpStatusCode.NoContent);
    }
    [Route ("RGB")]
    public HttpResponseMessage PutRGB(int N, int R, int G, int B, int I)
    {
        return Request.CreateResponse (HttpStatusCode.NoContent);
    }
}

1 个答案:

答案 0 :(得分:1)

这似乎是一个CORS问题。

了解更多here

阅读here有关如何启用CORS的信息。