Bill Wagner 00491910a2 C# 7 language feature updates
Controllers/AccountController:
Replace single line methods with expression bodied members.
Includes constructor, C# 7 feature.

Controllers/CatalogController:
Remove unnecessary ToString() call.
Replace single line methods with expression bodied members.

Extensions/HttpClientExtensions:
Replace single line methods with expression bodied members.

Extensions/SessionExtensions:
Replace single line methods with expression bodied members.

Services/BasketService:
Remove unnecessary ToString() calls.
Add ?? to simplify conditional initialization
Use TryGetValue and out variable initialization to simplify Quantity
calculation

Services/CatalogService:
Use Value<T> generic method instead of dynamic types.
There is a lot of overhead for dynamic and it seems overkill here.

Services/IdentityParser:
Use the pattern matching is expression.
Refactor the LINQ queries to enumerate the collection (and create an
enumerator)
only once. The previous code had 3 enumerations.

Services/Utilities/HttpApiClient:
Remove the 'async' modifier and 'await' statements from methods where
the only asynchronous statement is the final statement of the method,
and
the task from the underlying method can be returned.

Services/Utilities/HttpApiClientWrapper:
Use expression bodied members where applicable.
Remove the 'async' modifier and 'await' statements from methods where
the only asynchronous statement is the final statement of the method,
and
the task from the underlying method can be returned.

ViewComponents/Cart:
Use expression bodied members where applicable.

ViewComponents/CartList:
Use expression bodied members where applicable.
Remove the 'async' modifier and 'await' statements from methods where
the only asynchronous statement is the final statement of the method,
and
the task from the underlying method can be returned.

ViewModels/Annotations/CardExpiration:
Use the out variable initializer to simplify the validation of the
card expiration date.

ViewModels/Basket:
Use property initializer syntax instead of constructor body

ViewModels/CatalogViewModels/IndexViewModel:
Use expression bodied property to return the calculated 'Disabled'
property

ViewModels/Order:
Use property initializer syntax.
2017-03-20 14:18:20 -04:00

46 lines
1.7 KiB
C#

using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace WebMVC.Services.Utilities
{
public class HttpApiClient : IHttpClient
{
private HttpClient _client;
private ILogger _logger;
public HttpClient Inst => _client;
public HttpApiClient()
{
_client = new HttpClient();
_logger = new LoggerFactory().CreateLogger(nameof(HttpApiClientWrapper));
}
// Notice that these (and other methods below) are Task
// returning asynchronous methods. But, they do not
// have the 'async' modifier, and do not contain
// any 'await statements. In each of these methods,
// the only asynchronous call is the last (or only)
// statement of the method. In those instances,
// a Task returning method that does not use the
// async modifier is preferred. The compiler generates
// synchronous code for this method, but returns the
// task from the underlying asynchronous method. The
// generated code does not contain the state machine
// generated for asynchronous methods.
public Task<string> GetStringAsync(string uri) =>
_client.GetStringAsync(uri);
public Task<HttpResponseMessage> PostAsync<T>(string uri, T item)
{
var contentString = new StringContent(JsonConvert.SerializeObject(item), System.Text.Encoding.UTF8, "application/json");
return _client.PostAsync(uri, contentString);
}
public Task<HttpResponseMessage> DeleteAsync(string uri) =>
_client.DeleteAsync(uri);
}
}