2017-01-18 4 views
0
var client = new HttpClient(); 
client.DefaultRequestHeaders.Add("x-ms-version", "2016-05-31"); 
var content = new FormUrlEncodedContent(new KeyValuePair<string, string>[] 
{ 
    new KeyValuePair<string, string>("api-version", "2016-08-01") 
}); 
content.Headers.ContentType = new MediaTypeHeaderValue("application/xml"); 
var response = client.PostAsync("https://management.azure.com/subscriptions/SuscriptionID/resourceGroups/Default-Web-SoutheastAsia/providers/Microsoft.Web/sites/MyAppName/stop?", content); 

Это, как я сделать вызов Azure WebApp REST API, но я получаю StatusCode: BadRequest400-BadRequest во время вызова остальных апов лазурного Web App

+0

Вы также должны прочитать ответ, он расскажет вам больше. – juunas

+0

И ваш тип контента, безусловно, не является приложением/xml, это 'application/x-www-form-urlencoded'. Может быть, вы хотели бы вместо этого выбрать заголовок Accept? – juunas

ответ

0

Есть некоторые проблемы с вашим кодом:

  • Вы смешиваете Azure Service Management API с Azure Resource Manager (ARM) API. API для остановки веб-приложения - это API-интерфейс Resource Manager, поэтому вам не нужно предоставлять x-ms-version.
  • В вашем запросе отсутствует заголовок Authorization. Для запросов ARM API требуется заголовок авторизации. См. Эту ссылку о том, как выполнять запросы API ARM: https://docs.microsoft.com/en-us/rest/api/gettingstarted/.

Основываясь на них, я изменил код:

static async void StopWebApp() 
    { 
     var subscriptionId = "<your subscription id>"; 
     var resourceGroupName = "<your resource group name>"; 
     var webAppName = "<your web app name>"; 
     var token = "<bearer token>"; 
     var url = string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Web/sites/{2}/stop?api-version=2016-08-01", subscriptionId, resourceGroupName, webAppName); 
     var client = new HttpClient(); 
     client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); 
     var t = await client.PostAsync(url, null); 
     var response = t.StatusCode; 
     Console.WriteLine(t.StatusCode); 
    } 

Пожалуйста, попробуйте использовать этот код. Предполагая, что вы приобрели правильный токен, код должен работать.

+0

Спасибо за ответ. У меня есть issure относительно токена. Можете заглянуть в этот вопрос, пожалуйста. Http://stackoverflow.com/questions/41736162/unauthorized-when-try-to-get-token-using-arm -api –

+0

Я получаю ошибку :: {"error": {"code": "AuthorizationFailed", "message": "У клиента someId с идентификатором объекта someId 'нет разрешения на выполнение действия' Microsoft.Web/sites/stop/action 'over scope' /subscriptions/Subscriptionid/resourceGroups/Default-Web-SoutheastAsia/providers/Microsoft.Web/sites/Webapp '.}} –

+0

Вы столкнулись с «контролем доступа на основе ролей». В основном вы получаете эту ошибку, потому что пользователь (в вашем случае приложения или «Принцип обслуживания» в терминах Azure) не имеет прав для выполнения этой операции. См. Эту ссылку о том, как вы можете назначать разрешения: https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-configure. Для простоты я бы рекомендовал вам назначить соответствующего пользователя роль «Contributor». –