2017-01-18 1 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); 

Dies ist, wie ich einen Anruf zu Azure WebApp Rest api machen, aber ich bin immer Statuscode: BadRequest400-BadRequest während App Anruf Rest api von azur Web

+0

Sie sollten die Antwort auch lesen, es wird Ihnen mehr erzählen. – juunas

+0

Und Ihr Inhaltstyp ist sicherlich nicht application/xml, sondern 'application/x-www-form-urlencoded'. Vielleicht wollten Sie stattdessen den Accept-Header setzen? – juunas

Antwort

0

Es gibt einige Probleme mit Ihrem Code:

  • Sie mischen Azure Service Management API mit Azure Resource Manager (ARM) API. API zum Stoppen einer Web-App ist eine Resource Manager-API. Daher müssen Sie x-ms-version nicht angeben.
  • Sie fehlen die Authorization Header in Ihrer Anfrage. ARM-API-Anforderungen erfordern einen Autorisierungsheader. Bitte beachten Sie diesen Link zur Durchführung von ARM-API-Anfragen: https://docs.microsoft.com/en-us/rest/api/gettingstarted/.

auf diese Basierend, geändert ich Code:

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); 
    } 

Bitte versuchen Sie es mit diesem Code. Vorausgesetzt, Sie haben das richtige Token erworben, sollte der Code funktionieren.

+0

Vielen Dank für die Antwort.Ich habe issure in Bezug auf Token.Kannst du in diese Frage bitte .. http://stackoverflow.com/questions/41736162/unauthorized-when-try-to-get-token-using-arm -api –

+0

Ich bekomme den Fehler :: {"error": {"code": "AuthorizationFailed", "message": "Der Client 'sameId' mit der Objekt-ID 'someId' hat keine Berechtigung zum Ausführen einer Aktion 'Microsoft.Web/sites/stop/action 'over scope' /subscriptions/SubscriptionID/resourceGroups/Default-Web-SoutheastAsia/providers/Microsoft.Web/sites/Webapp '. "}} –

+0

Sie haben eine" rollenbasierte Zugriffskontrolle ". Dieser Fehler tritt grundsätzlich auf, weil der Benutzer (in Ihrem Fall Anwendung oder 'Service Principal' in Azure-Bedingungen) keine Berechtigungen zum Ausführen dieses Vorgangs hat. Unter diesem Link finden Sie Informationen dazu, wie Sie Berechtigungen zuweisen können: https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-configure. Der Einfachheit halber würde ich empfehlen, dem betreffenden Benutzer die Rolle "Mitwirkende" zuzuweisen. –