5

我正在尝试对 WEB API 方法进行简单的 jquery ajax 调用。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript">

    $(document).ready(function () {

        $.ajax({
            type: 'POST',
            url: 'http://redrock.com:6606/api/values/get',

            dataType: "jsonp",

            crossDomain: true,
            success: function (msg) {

                alert("success");

            },
            error: function (request, status, error) {

                alert(error);
            }
        });
    });

</script>

WEB API 动作:

 public IEnumerable<string> Get()
  {
     return new string[] { "value1", "value2" };
  }

ajax 调用不会访问 WEB API。我在浏览器控制台中收到以下错误。

GET http://redrock.com:6606/api/values/get?callback=jQuery18207315279033500701_1383300951840&_=1383300951850 400(错误请求)

4

2 回答 2

2

除非进行跨域调用,否则不需要使用 jsonp(jsonp 还需要 Web API 中的自定义格式化程序)。

$.getJSON('http://redrock.com:6606/api/values', function(data){
    console.log(data);
});

编辑:

要安装 jsonp 媒体类型格式化程序,请查看此项目:https ://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp

  • 使用 nuget 下载格式化程序
  • 注册格式化程序
  • 更新你的路由配置
于 2013-11-01T11:54:02.703 回答
2

您没有包含路由设置的代码,但假设它是正确的,问题可能是由于您在尝试使用 POST 请求时将 WebApi 方法命名为“Get”而引起的。发生这种情况是因为 WebApi 试图从操作名称中找出 HTTP 动词。

我建议重命名操作或将[HttpPost]属性添加到您的操作方法。你也可以试试WebApiRouteDebugger包。

于 2013-11-01T10:43:20.800 回答