MobileServiceClient.invokeApi 结果 "No action was found on the controller"

MobileServiceClient.invokeApi results in "No action was found on the controller"

我有一个名为 Foo 的自定义 API。当我尝试使用 MobileServiceClient 的 javascript 库从 Html 页面调用此自定义方法时,出现错误:

"No action was found on the controller 'Foo' that matches the request"

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.7.min.js"></script>

< script type = "text/javascript" >
  $(document).ready(function() {
    $('#runAllTests').on('click', function() {
      var serviceClient = new WindowsAzure.MobileServiceClient('<url>', '<key>');
      serviceClient.invokeApi('Foo', {
        body: {
          val1: 'value1',
          val2: 'value2',
        },
        method: 'GET'
      }).done(function(results) {
        console.log('success');
        console.log(results);
      }, function(error) {
        console.log('error');
        console.log(error);
      });

    });
  }); < /script>

然而,当我从我的 Windows 商店应用程序调用此方法时,一切正常。

配置的跨域资源共享(cors)*

更新:看起来我需要调用此方法并使用如下方法名称指定参数:

 serviceClient.invokeApi('Foo?val1=value1&val2=value2', {
   method: 'GET'
 })

是否正确?看起来即使对于 POST 方法我也必须这样做,除非我的参数具有复杂类型。

更新 2:我的自定义 API 方法的定义如下

[AuthorizeLevel(AuthorizationLevel.Anonymous)]
public class FooController : ApiController
{
     public HttpResponseMessage Get(string val1, string val2)
     {
         //method body
     }
}

好的,我发现我需要通过 body 而非 parameters 传递这些参数。当您通过 body 传递它们或至少缺少一个参数时,您将收到 'Not found' 错误。

serviceClient.invokeApi('Foo', {
  parameters: {
    val1: 'value1',
    val2: 'value2',
  },
  method: 'GET'
})