У меня есть REST API, разработанный с использованием asp.net web api2. Я выполняю миграцию REST API на конечные точки GraphQL.net с помощью ядра asp.net 2. В существующем коде REST API у меня есть обработчик делегирования, который используется для расширения результата вызова REST API дополнительными данными, которые в данном случае являются добавлением данных локализации в ответ. Поскольку обработчик делегирования больше не поддерживается в ядре asp.net 2. Я пытаюсь перенести существующий обработчик делегирования на компонент Middleware.
В справочных целях я следовал деталям, указанным по адресу: Расширение ответа WebApi с помощью промежуточного программного обеспечения OWIN и
https://www.devtrends.co.uk/blog/wrapping-asp.net-web-api-responses-for-consistency-and-to-provide-additional-information
Здесь у меня есть пара запросов:
Как отобразить код ниже в случае Middlware?
var response = ожидание base.SendAsync (запрос, cancellationToken);
Где разместить промежуточное программное обеспечение в методе Startup.cs Configure.
Промежуточное программное обеспечение, эквивалентное существующему делегирующему обработчику
Код:
public class CommonResponserHandler : DelegatingHandler
{
ICommonService _commonService = new CommonService();
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
string locale = string.Empty;
if (request.Headers.Contains("Accept-Language"))
{
locale = request.Headers.GetValues("Accept-Language").First();
}
bool initialAuthorizationStatus = GetInitialAuthorization(request);
var response = await base.SendAsync(request, cancellationToken);
APIResult commonResponse;
if (response.TryGetContentValue<APIResult>(out commonResponse))
{
//populate common response here;
UpdateCommonResponse(request, response, commonResponse);
//UpdateCommonResponse(basicResponse, commonResponse);
HttpResponseMessage newResponse;
bool authorizatinCheckResult = AssertAuthorization(initialAuthorizationStatus, request);
if (authorizatinCheckResult)
{
newResponse = request.CreateResponse(response.StatusCode, commonResponse);
}
else
{
var unAuthorisedResult = new APIResult{Authorized = false, UserMessage = Constants.Unauthorized, Locale = new Locale(_commonService.GetLanguageFromLocale(locale))};
newResponse = request.CreateResponse(HttpStatusCode.Unauthorized, unAuthorisedResult);
var jsonSerializerSettings = new JsonSerializerSettings{ContractResolver = new CamelCasePropertyNamesContractResolver()};
HttpContext.Current.Items["401message"] = JsonConvert.SerializeObject(unAuthorisedResult, Formatting.Indented, jsonSerializerSettings);
}
//Add headers from old response to new response
foreach (var header in response.Headers)
{
newResponse.Headers.Add(header.Key, header.Value);
}
return newResponse;
}
return response;
}
}
Может ли кто-нибудь помочь мне дать рекомендации по решению проблемы?