【发布时间】:2018-06-07 19:32:59
【问题描述】:
我有一个在 localhost:4512 运行的 Web API 2.0,我想拦截对域 localhost:4512 发出的所有请求,无论它们是否由特定路由处理。
例如,我想捕获对localhost:4512/abc.dfsada 或localhost:4512/meh/abc.js 的请求
我已经用 DelegatingHandler 尝试过,但 unfortunately 这只会拦截对已处理路由的请求:
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});
【问题讨论】:
-
你在使用 Owin 吗?
-
不,我没有使用 Owin。
标签: c# asp.net-web-api actionfilterattribute delegatinghandler