Skip to content

Commit cbc6f82

Browse files
author
Cory Thompson
committed
Provide better WebPushException messages.
1 parent 029e74a commit cbc6f82

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

WebPush/WebPushClient.cs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Net;
34
using System.Net.Http;
45
using System.Net.Http.Headers;
56
using System.Threading.Tasks;
@@ -245,11 +246,12 @@ public void SendNotification(PushSubscription subscription, string payload = nul
245246
Dictionary<string, object> options = null)
246247
{
247248
var request = GenerateRequestDetails(subscription, payload, options);
248-
var response = HttpClient.SendAsync(request);
249-
response.Wait();
249+
var sendAsyncTask = HttpClient.SendAsync(request);
250+
sendAsyncTask.Wait();
250251

251-
throw new WebPushException(@"Received unexpected response code", response.Result.StatusCode,
252-
response.Result.Headers, subscription);
252+
var response = sendAsyncTask.Result;
253+
254+
HandleResponse(response, subscription);
253255
}
254256

255257
/// <summary>
@@ -296,8 +298,7 @@ public async Task SendNotificationAsync(PushSubscription subscription, string pa
296298
var request = GenerateRequestDetails(subscription, payload, options);
297299
var response = await HttpClient.SendAsync(request);
298300

299-
throw new WebPushException(@"Received unexpected response code", response.StatusCode, response.Headers,
300-
subscription);
301+
HandleResponse(response, subscription);
301302
}
302303

303304
/// <summary>
@@ -328,5 +329,43 @@ public async Task SendNotificationAsync(PushSubscription subscription, string pa
328329
options["gcmAPIKey"] = gcmApiKey;
329330
await SendNotificationAsync(subscription, payload, options);
330331
}
332+
333+
/// <summary>
334+
/// Handle Web Push responses.
335+
/// </summary>
336+
/// <param name="response"></param>
337+
/// <param name="subscription"></param>
338+
private static void HandleResponse(HttpResponseMessage response, PushSubscription subscription)
339+
{
340+
// Successful
341+
if (response.StatusCode == HttpStatusCode.Created)
342+
{
343+
return;
344+
}
345+
346+
// Error
347+
var message = @"Received unexpected response code: " + (int) response.StatusCode;
348+
switch (response.StatusCode)
349+
{
350+
case HttpStatusCode.BadRequest:
351+
message = "Bad Request";
352+
break;
353+
354+
case HttpStatusCode.RequestEntityTooLarge:
355+
message = "Payload too large";
356+
break;
357+
358+
case (HttpStatusCode)429:
359+
message = "Too many request.";
360+
break;
361+
362+
case HttpStatusCode.NotFound:
363+
case HttpStatusCode.Gone:
364+
message = "Subscription no longer valid";
365+
break;
366+
}
367+
368+
throw new WebPushException(message, response.StatusCode, response.Headers, subscription);
369+
}
331370
}
332371
}

0 commit comments

Comments
 (0)