У меня была мобильная служба, работающая на Azure, и я решил создать новую услугу и сам перенести код. Новая услуга относится к новому типу: Azure Mobile App Service.
В настоящее время я работаю с проверкой подлинности и могу выполнять миграцию/обновление базы данных. Я следую примеру TodoItem. Теперь я хочу создать свой собственный пользовательский API, который легко работал на MobileService, но я не могу заставить его работать над Azure Mobile App:/
Я следил за этими двумя ссылками web-Api-routing и приложение-сервис -Мобильный-бэкенд. И теперь у меня есть следующее:
Я создал новый контроллер:
[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 я добавил код ниже в соответствии с backend:
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/Тест/completeAll", Версия: 1.1, Содержимое: System.Net.Http.StringContent, Заголовки: {X-ZUMO-ОСОБЕННОСТИ: AT X-ZUMO-INSTALLATION-ID: e9b359df-d15e-4119-a4ad-afe3031d8cd5 X-ZUMO-AUTH: xxxxxxxxxxx Принять: application/json User-Agent: Пользовательский агент 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-VERSION: 2.0.0 Content-Type: application/json; charset = utf-8 Content-Length: 3}}
Но продолжайте получать: 404 (не найдено) Debug Message "Запрос не может быть выполнен. (Не найдено)"
Что мне не хватает:/?
Обновление
Я попытался расширить код в MobileApp.cs, используя:
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.UseDefaultConfiguration().MapApiControllers()
.ApplyTo(config);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
на основе app-service-backend, однако все же нет доступа:/
Update
Я использовал fiddler2 для доступа к конечной точке через браузер и получил следующие результаты:
Обновить снова
Я попытался создать еще одно минимальное решение, но все равно получаю ту же ошибку. Есть ли какие-нибудь большие учебники, которые я могу выполнить для достижения этой функциональности?
Положительное чувство медленно испаряется.,
Вопрос также выполняется теперь на msdn, здесь я обновляюсь, если там отображается какая-либо информация.
Update
Протестировано замечание Линды, и я действительно могу получить доступ к конвертеру значений:
// 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, но исходный все еще работает. Таким образом, это не повлияло на эту проблему.