У меня есть Web API 2.0, работающий на localhost:4512
, и я хочу перехватывать все запросы, сделанные к домену localhost:4512
, независимо от того, обрабатываются они по определенному маршруту или нет. Например, я хочу зафиксировать запросы, сделанные localhost:4512/abc.dfsada
или localhost:4512/meh/abc.js
.
Я пробовал это с помощью DelegatingHandler, но к сожалению это перехватывает только запросы к обработанным маршрутам:
public class ProxyHandler : DelegatingHandler
{
private async Task<HttpResponseMessage> RedirectRequest(HttpRequestMessage request, CancellationToken cancellationToken)
{
var redirectLocation = "http://localhost:54957/";
var localPath = request.RequestUri.LocalPath;
var client = new HttpClient();
var clonedRequest = await request.Clone();
clonedRequest.RequestUri = new Uri(redirectLocation + localPath);
return await client.SendAsync(clonedRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return RedirectRequest(request, cancellationToken);
}
}
и в WebConfig.cs:
config.MessageHandlers.Add(new ProxyHandler());
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional});