Azure 移动服务自定义 API 客户端收到错误请求

Azure Mobile Services Custom API Getting Bad Request on Client

所以我正在使用 Azure 移动服务后端来尝试进行自定义 API。但是我似乎无法从客户端连接到模板 table。当您使用模板创建新的 Azure 移动服务时,他们会为您提供类似于此格式的 values API 控制器

[MobileAppController]
public class ValuesController : ApiController
{
    // GET api/values
    [Route("api/values")]
    public string Get()
    {
        return "test";
    }
}

我正尝试从客户端调用此端点,如下所示

var result = mobileService.InvokeApiAsync<string>("values", HttpMethod.Get, null).Result;

出于某种原因,我不断收到此异常

{"The request could not be completed. (Bad Request)"}

{Method: GET, RequestUri: 'http://localhost:58457/api/values', Version: 1.1, Content: <null>, Headers: { X-ZUMO-FEATURES: AT X-ZUMO-INSTALLATION-ID: b04f4e19-4f41-46ed-9767-9c1352037559 Accept: application/json User-Agent: ZUMO/1.3 User-Agent: (lang=Managed; os=Windows; os_version=6.1.65536.7601; arch=Win32NT; version=1.3.30324.0) X-ZUMO-VERSION: ZUMO/1.3 (lang=Managed; os=Windows; os_version=6.1.65536.7601; arch=Win32NT; version=1.3.30324.0) }}

这也只是模板,所以在我启动任何自定义端点和 运行 之前,我需要它才能正常工作。关于问题可能是什么的任何想法?

您说的是 Mobile Service,但您使用的控制器是 MobileAppController。

这表明您实际使用的是移动应用程序。如果您查看服务器项目 packages.config,您可能会看到类似这样的内容。

 <package id="Microsoft.Azure.Mobile.Server" version="1.0.119.0" targetFramework="net45" />

我怀疑您收到的 400 是因为您使用的移动客户端版本低于 2.0.0。

在您的客户端项目包配置中,尝试使用较新的客户端版本,例如:

<package id="Microsoft.Azure.Mobile.Client" version="2.0.1" targetFramework="win81" />

您还应该检查 400 响应的正文以获得明确的错误消息。我希望它会说类似的话:

{"message":"No API version was specified in the request, this request needs to specify a ZUMO-API-VERSION of '2.0.0'.  For more information and supported clients see: http://go.microsoft.com/fwlink/?LinkId=690568#2.0.0"}

您可以通过为应用程序设置 MS_SkipVersionCheck 设置真值来选择退出版本检查。在您的 web.config 或 Azure 门户的“应用程序设置”部分中指定。 ms_skipversioncheck 在门户中为真。

实际上,即使您在 package.config 中指定了您使用的客户端版本,您仍然会收到相同的 Bad Request 错误。未指定 Zumo 版本。您必须向 InvokeApiAsync 方法传递一个指定版本的参数。例如:

var arguments = new Dictionary<string, string>
            {
                {"ZUMO-API-VERSION", "2.0.0" }
            };
var result = MobileService.InvokeApiAsync<string>("CONTROLLERSNAME",  "HttpMethod.Get", arguements).Result;

和宾果游戏它会起作用。

我已经完成了以下link

https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-client-and-server-versioning

实际上是说Mobile Apps客户端和服务端的SDK最初都是基于Mobile Services中的SDK,但是彼此不兼容。也就是说,您必须将移动应用程序客户端 SDK 与移动应用程序服务器 SDK 一起使用,对于移动服务也是如此。此合同通过客户端和服务器 SDK 使用的特殊 header 值执行,ZUMO-API-VERSION。

因此,您必须在请求中添加Headers

HEADERS: ZUMO-API-VERSION: 2.0.0

或者

http://localhost/api/values/get?ZUMO-API-VERSION=2.0.0

您可以通过将应用设置 MS_SkipVersionCheck 的值设置为 true 来选择退出版本检查,在

下的 web.config 中指定