我在 Azure 上运行了一个 MobileService,并决定自己创建一个新服务并迁移代码。新服务属于称为 Azure 移动应用服务的新类型。
目前我有身份验证工作,可以做迁移/更新数据库。我正在关注 TodoItem 示例。我现在想创建自己的自定义 API,它可以轻松地在 MobileService 上运行,但我无法让它在 Azure 移动应用程序上运行:/
我已经关注了这两个链接web-Api-routing和app-service-mobile-backend。我现在有以下内容:
我创建了一个新控制器:
[MobileAppController]
public class TestController : ApiController
{
// GET api/Test
[Route("api/Test/completeAll")]
[HttpPost]
public async Task<ihttpactionresult> completeAll(string info)
{
return Ok(info + info + info);
}
}
在 mobileApp.cs 我根据后端添加了以下代码:
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
另外,我根据web-api-routing安装了以下软件包:
Microsoft.AspNet.WebApi.WebHost
以及来自客户的电话:
string t = await App.MobileService.InvokeApiAsync<string,string>("Test/completeAll", "hej");
调试显示,它是正确的 URL:
{方法:POST,RequestUri:' https://xxxxxxx.azurewebsites.net/api/Test/completeAll ',版本:1.1,内容:System.Net.Http.StringContent,标头:{ X-ZUMO-FEATURES:AT X -ZUMO-INSTALLATION-ID: e9b359df-d15e-4119-a4ad-afe3031d8cd5 X-ZUMO-AUTH: xxxxxxxxxxx 接受: application/json 用户代理: ZUMO/2.0 用户代理: (lang=Managed; os=Windows Store; os_version =--;arch=Neutral;version=2.0.31125.0) X-ZUMO-VERSION: ZUMO/2.0 (lang=Managed;os=Windows Store;os_version=--;arch=Neutral;version=2.0.31125.0) ZUMO- API 版本:2.0.0 内容类型:应用程序/json;charset=utf-8 内容长度:3}}
但不断收到:404(未找到)调试消息“请求无法完成。(未找到)”
我错过了什么:/?
更新
我曾尝试扩展 The mobileApp.cs 中的代码,其中包括:
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.UseDefaultConfiguration().MapApiControllers()
.ApplyTo(config);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
基于app-service-backend,但仍然无法访问:/
更新
我使用fiddler2通过浏览器访问端点,得到以下结果:
再次更新
我试图创建另一个最小的解决方案,但仍然得到同样的错误。有没有我可以遵循的很棒的教程来实现这个功能?
积极的感觉正在慢慢蒸发。. .
这个问题现在也在msdn上运行,如果那里显示任何信息,我会在这里更新。
更新
测试了 Lindas 的评论,我实际上可以访问值转换器:
// Use the MobileAppController attribute for each ApiController you want to use
// from your mobile clients
[MobileAppController]
public class ValuesController : ApiController
{
// GET api/values
public string Get()
{
MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings();
ITraceWriter traceWriter = this.Configuration.Services.GetTraceWriter();
string host = settings.HostName ?? "localhost";
string greeting = "Hello from " + host;
traceWriter.Info(greeting);
return greeting;
}
// POST api/values
public string Post()
{
return "Hello World!";
}
}
我使用 post 和 get 函数访问:
string t = await App.MobileService.InvokeApiAsync<string, string>("values", null, HttpMethod.Post, null);
或者
string t = await App.MobileService.InvokeApiAsync<string, string>("values", null, HttpMethod.Get, null);
但是我粘贴的代码没有路由,为什么我可以使用值来访问它?如果不使用路由参数,原始控制器的路径是什么?
额外的信息
我现在已经创建了 Microsoft 的支持票证,并将更新更多信息。. . 希望。
来自 MSDN 论坛的更新
信息:尝试 MS_SkipVersionCheck 在此处阅读有关该属性的信息,它似乎不适用。但我试过了。仍然Not Found
适用于我的 API,但原来的 API 仍在工作。所以对这个问题没有影响。