Ich muss eine PATCH
Anfrage mit der Windows.Web.Http.HttpClient
Klasse machen und es gibt keine offizielle Dokumentation darüber, wie es geht. Wie kann ich das machen?
c#
http
patch
dotnet-httpclient
Schrödingers Schachtel
quelle
quelle
Update: Siehe SSX-SL33PY Antwort unten für eine noch bessere Lösung, die die gleiche Sache tut.
Sie können dieselbe Methode wie die Erweiterungsmethode schreiben, um sie direkt im HttpClient-Objekt aufzurufen:
public static class HttpClientExtensions { public static async Task<HttpResponseMessage> PatchAsync(this HttpClient client, Uri requestUri, HttpContent iContent) { var method = new HttpMethod("PATCH"); var request = new HttpRequestMessage(method, requestUri) { Content = iContent }; HttpResponseMessage response = new HttpResponseMessage(); try { response = await client.SendAsync(request); } catch (TaskCanceledException e) { Debug.WriteLine("ERROR: " + e.ToString()); } return response; } }
Verwendung:
var responseMessage = await httpClient.PatchAsync(new Uri("testUri"), httpContent);
quelle
HttpContent httpContent = new StringContent("Your JSON-String", Encoding.UTF8, "application/json");
für String-Inhalte.HttpContent content = new StringContent("{\"name\":\"John Doe\"", Encoding.UTF8, "application/json");
aber der Inhalt wird der Anforderung nicht hinzugefügt.Ich möchte die Antwort von @ alexander-pacha erweitern und vorschlagen, die folgende Erweiterungsklasse irgendwo in einer gemeinsamen Bibliothek hinzuzufügen. Ob dies eine gemeinsame Bibliothek für ein Projekt / einen Client / ein Framework / ... ist, müssen Sie selbst herausfinden.
public static class HttpClientExtensions { /// <summary> /// Send a PATCH request to the specified Uri as an asynchronous operation. /// </summary> /// /// <returns> /// Returns <see cref="T:System.Threading.Tasks.Task`1"/>.The task object representing the asynchronous operation. /// </returns> /// <param name="client">The instantiated Http Client <see cref="HttpClient"/></param> /// <param name="requestUri">The Uri the request is sent to.</param> /// <param name="content">The HTTP request content sent to the server.</param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="client"/> was null.</exception> /// <exception cref="T:System.ArgumentNullException">The <paramref name="requestUri"/> was null.</exception> public static Task<HttpResponseMessage> PatchAsync(this HttpClient client, string requestUri, HttpContent content) { return client.PatchAsync(CreateUri(requestUri), content); } /// <summary> /// Send a PATCH request to the specified Uri as an asynchronous operation. /// </summary> /// /// <returns> /// Returns <see cref="T:System.Threading.Tasks.Task`1"/>.The task object representing the asynchronous operation. /// </returns> /// <param name="client">The instantiated Http Client <see cref="HttpClient"/></param> /// <param name="requestUri">The Uri the request is sent to.</param> /// <param name="content">The HTTP request content sent to the server.</param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="client"/> was null.</exception> /// <exception cref="T:System.ArgumentNullException">The <paramref name="requestUri"/> was null.</exception> public static Task<HttpResponseMessage> PatchAsync(this HttpClient client, Uri requestUri, HttpContent content) { return client.PatchAsync(requestUri, content, CancellationToken.None); } /// <summary> /// Send a PATCH request with a cancellation token as an asynchronous operation. /// </summary> /// /// <returns> /// Returns <see cref="T:System.Threading.Tasks.Task`1"/>.The task object representing the asynchronous operation. /// </returns> /// <param name="client">The instantiated Http Client <see cref="HttpClient"/></param> /// <param name="requestUri">The Uri the request is sent to.</param> /// <param name="content">The HTTP request content sent to the server.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="client"/> was null.</exception> /// <exception cref="T:System.ArgumentNullException">The <paramref name="requestUri"/> was null.</exception> public static Task<HttpResponseMessage> PatchAsync(this HttpClient client, string requestUri, HttpContent content, CancellationToken cancellationToken) { return client.PatchAsync(CreateUri(requestUri), content, cancellationToken); } /// <summary> /// Send a PATCH request with a cancellation token as an asynchronous operation. /// </summary> /// /// <returns> /// Returns <see cref="T:System.Threading.Tasks.Task`1"/>.The task object representing the asynchronous operation. /// </returns> /// <param name="client">The instantiated Http Client <see cref="HttpClient"/></param> /// <param name="requestUri">The Uri the request is sent to.</param> /// <param name="content">The HTTP request content sent to the server.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="client"/> was null.</exception> /// <exception cref="T:System.ArgumentNullException">The <paramref name="requestUri"/> was null.</exception> public static Task<HttpResponseMessage> PatchAsync(this HttpClient client, Uri requestUri, HttpContent content, CancellationToken cancellationToken) { return client.SendAsync(new HttpRequestMessage(new HttpMethod("PATCH"), requestUri) { Content = content }, cancellationToken); } private static Uri CreateUri(string uri) { return string.IsNullOrEmpty(uri) ? null : new Uri(uri, UriKind.RelativeOrAbsolute); } }
Auf diese Weise warten Sie nicht auf die Ausführung in einer statischen Erweiterungsklasse und halten sie auf, aber Sie behandeln dies so, als würden Sie wirklich einen
PostAsync
oder einenPutAsync
Anruf tätigen. Sie haben auch die gleichen Überlastungen zur Verfügung und lassen denHttpClient
Griff alles handhaben, wofür er entwickelt wurde.quelle
Damit es funktioniert, müssen Sie den Inhalt folgendermaßen übergeben:
HttpContent httpContent = new StringContent("Your JSON-String", Encoding.UTF8, "application/json-patch+json");
quelle