Ich versuche 301 eine ältere URL mit einer Middleware umzuleiten.ASP.NET Core RC1 MVC 6 - Wie auf UrlHelper von Middleware zugreifen und Url zu Aktion erstellen
private static Boolean IsLegacyPathToPost(this HttpContext context)
{
return context.IsLegacyPath() && context.Request.Path.Value.Contains("/archives/");
}
public static void HandleLegacyRoutingMiddleware(this IApplicationBuilder builder)
{
builder.MapWhen(context => context.IsLegacyPathToPost(), RedirectFromPost);
}
private static void RedirectFromPost(IApplicationBuilder builder)
{
builder.Run(async context =>
{
await Task.Run(() =>
{
//urlHelper is instanciated but it's ActionContext is null
IUrlHelper urlHelper = context.RequestServices.GetService(typeof(IUrlHelper)) as IUrlHelper;
IBlogContext blogContext = context.RequestServices.GetService(typeof(IBlogContext)) as IBlogContext;
//Extract key
var sections = context.Request.Path.Value.Split('/').ToList();
var archives = sections.IndexOf("archives");
var postEscapedTitle = sections[archives + 1];
//Query categoryCode from postEscapedTitle
var query = new GetPostsQuery(blogContext).ByEscapedTitle(postEscapedTitle).WithCategory().Build();
var categoryCode = query.Single().Categories.First().Code;
//Redirect
context.Response.Redirect(urlHelper.Action("Index", "Posts", new { postEscapedTitle = postEscapedTitle, categoryCode = categoryCode }), true);
});
});
}
Wie Sie lesen können, verwende ich die MapWhen Methode, die ich in der Methode RedirectFromPost instanziiert meine IUrlHelper Instanz beschränken. Der ServiceProvider gibt mir eine leere Instanz, ohne den ActionContext, um IUrlHelper.Action() zu verwenden.
Hatte jemand eine ähnliche Herausforderung und einen Einblick für mich?