c# - scraping - input asp for
Crear un proxy API en ASP.NET MVC 6 (2)
Estoy migrando el código de un proyecto existente de WebApi 2 y me pregunto cómo realizar el equivalente al código siguiente en ASP.NET 5 MVC 6. No veo ningún código de ruta que acepte una opción de controlador.
config.Routes.MapHttpRoute("SomeApiProxy", "api/someapi/{*path}",
handler: HttpClientFactory.CreatePipeline(new HttpClientHandler(), new DelegatingHandler[] {new ForwardingProxyHandler(new Uri("http://some-api.com/api/v2/"))}),
defaults: new {path = RouteParameter.Optional},
constraints: null
);
Esto está fuera de mi cabeza, pero podrías crear un middleware. Esto funcionaría para obtener solicitudes sin encabezados, pero podría modificarse para hacer más.
app.Use( async ( context, next ) =>
{
var pathAndQuery = context.Request.GetUri().PathAndQuery;
const string apiEndpoint = "/api/someapi/";
if ( !pathAndQuery.StartsWith( apiEndpoint ) )
//continues through the rest of the pipeline
await next();
else
{
using ( var httpClient = new HttpClient() )
{
var response = await httpClient.GetAsync( "http://some-api.com/api/v2/" + pathAndQuery.Replace( apiEndpoint, "" ) );
var result = await response.Content.ReadAsStringAsync();
context.Response.StatusCode = (int)response.StatusCode;
await context.Response.WriteAsync( result );
}
}
} );
Si pones esta aplicación befire. UseMvc () interceptará cualquier solicitud donde la ruta comience con / api / someapi
De hecho, escribimos un middleware para esto (bueno, nuestro interno lo hizo :)) https://github.com/aspnet/Proxy