自分のダイナミックルータを実装しようとしています。私の計画はデータベースからルートを取得し、ダイナミックなランディングページを作成することです。 404。context.RouteDataを新しいルートデータに設定した後、404。IRouterの実装で取得するASP.NET Core MVC
私はルートを見つけるたびにLandingPageControllerとIndex IActionResultにリダイレクトしたいだけです。
using System.Threading.Tasks;
using Microsoft.AspNetCore.Routing;
using System.Collections.Generic;
using System.Linq;
namespace Myproject.Web.Main.Config
{
public class LandingPageRouter : IRouter
{
public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
return null;
}
public Task RouteAsync(RouteContext context)
{
var requestPath = context.HttpContext.Request.Path.Value;
if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == '/')
{
requestPath = requestPath.Substring(1);
}
var pagefound = GetPages().Any(x => x == requestPath);
if (pagefound)
{
//TODO: Handle querystrings
var routeData = new RouteData();
routeData.Values["controller"] = "LandingPage";
routeData.Values["action"] = "Index";
context.RouteData = routeData;
}
return Task.FromResult(0);
}
private IEnumerable<string> GetPages()
{
//TODO: pull from database
return new List<string> { "page-url-title", "another-dynamic-url" };
}
}
}
私はこのanswerに見えたが、時代遅れ文脈でいくつかのプロパティでもRC2にはもはや存在しないようです。
何が欠けていますか?
用語MVC6の使用を中止してください。新しいバージョンのレガシーMVCがリリースされると、混乱が広がります。以前の "ASP.NET 5 MVC6"は、ASP.NET MVC5の次のバージョンではなく**完全に新しいフレームワークであることを明確に**するために、 "ASP.NET Core MVC 1.0"と命名されました**。また、正しいタグは 'asp.net-core-mvc'です! – Tseng
興味深いシナリオのように見えます...もっと詳しい情報を教えてください。したがって、 '/ articles/cavaliers-win-nba-title'のようなリクエストが'/articles/10' urlにマップされ、 'articles'コントローラによって処理され、記事ID '10'また、リンクが生成されたときに、マッピングが他の方法で行われるようにするには...そうですか? –
@KiranChallaルートレベルでmydomain.com/name-of-the-articleのようなルートを設定し、内部的にそれらのルートを私のLanding Pageコントローラにマップしたいと思っています。これはlandingpage/Idかlandingpage/name-記事の –