我有一个用于大规模应用程序的asp.net mvc Web应用程序,它支持15种不同语言的多语言。我正在使用属性路由来本地化我的路由,因为需要本地化url。这创造了2675条路线。
我使用Html.ActionLink和Url.Action帮助程序方法为我的控制器操作生成url。我发现虽然在我的Partial Razor Views中包含了这些,但是减慢了我的视图渲染速度。例如,如果我删除其中一些,响应时间可以从5-6秒到不到一秒。
我认为问题可能出在大量路线上。因此,我认为需要对此进行优化。
是否有人在使用大量路由与路由属性进行路由时遇到此问题?是否可以包含任何缓存或类似内容以提供帮助?我不是指输出缓存,而是缓存路由以确保Html.ActionLink和Url.Action渲染得更快?
修改
使用属性路由,我已将路由前缀属性添加到我的控制器,并且还归因于我的操作。以下是一个班级的样本。我没有明确地在我知道的任何地方添加路由 - 我假设其属性路由正在这样做
[RoutePrefix("customer", TranslationKey = "customer")]
public partial class CustomerController : BaseController
{
[Route("logon", TranslationKey = "logon")]
public virtual ActionResult LogOn(string returnUrl = "")
{
...
}
[GET("changerepresentative/{id:long}")]
public virtual ActionResult ChangeRepresentative(long id)
{
...
}
[GET("profile", TranslationKey = "profile")]
public virtual ActionResult ProfileInformation()
{
...
}
// etc
}
属性路由的配置
RouteTable.Routes.MapAttributeRoutes(config =>
{
var translationProvider = this.routeTranslationProvider.GetProvider();
config.AddRoutesFromAssemblyOf<MvcApplication>();
config.AddTranslationProvider(translationProvider);
config.AppendTrailingSlash = true;
config.UseLowercaseRoutes = true;
config.InheritActionsFromBaseController = true;
config.AutoGenerateRouteNames = true;
config.RouteNameBuilder = RouteNameBuilders.FirstInWins;
});
答案 0 :(得分:0)
我的.NET MVC应用程序遇到了类似的问题。我也没有找到任何方法来缓存路由表。在找到更好的解决方案之前,您可以将ActionLink
替换为RouteLink
,{{1}}根据密钥查找路径,因此速度要快得多。