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'
})
我有一个名为 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'
})