【问题标题】:Jquery Ajax Call to WEB APIJquery Ajax 调用 WEB API
【发布时间】:2013-11-12 12:59:39
【问题描述】:

我正在尝试对 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(错误请求)

【问题讨论】:

    标签: javascript jquery ajax asp.net-mvc asp.net-web-api


    【解决方案1】:

    除非你是跨域调用,否则没有必要使用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 下载格式化程序
    • 注册格式化程序
    • 更新您的路由配置

    【讨论】:

    • 嗨!我需要进行跨域调用
    • 当您从同一个域进行常规获取时,您的 API 是否返回数据,并且您是否为 jsonp 设置了媒体类型格式化程序?
    • 当我在与“json”相同的域和数据类型中将 URL 用作“/controller/action”时,它正在工作。我对 jsonp 格式化程序一无所知
    • 查看我关于设置 jsonp 格式化程序的编辑。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 1970-01-01
      • 2015-03-12
      • 2016-07-14
      • 2013-10-01
      • 2014-08-07
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多