У меня есть веб-приложение asp.net mvc для крупномасштабного приложения, которое многоязычно и поддерживает 15 разных языков. Я использую маршрутизацию атрибутов для локализации своих маршрутов, так как необходимо локализовать URL-адреса. Это создает 2675 маршрутов.
Я использую вспомогательные методы Html.ActionLink и Url.Action для создания URL-адресов для действий моего контроллера. Однако я обнаружил, что включение их в мои частичные представления Razor замедляет рендеринг моих представлений. Например, если я удалю некоторые из них, время отклика может составлять от 5-6 секунд до менее секунды.
Я считаю, что проблема может быть связана с большим количеством маршрутов. Поэтому я считаю, что требуется оптимизация этого.
У кого-нибудь была такая проблема с маршрутизацией при большом количестве маршрутов в связке с Attribute Routing? Любое кэширование или подобное, которое можно включить, чтобы помочь? Я имею в виду не кэширование вывода, а кэширование маршрутов для обеспечения более быстрого рендеринга 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;
});
Html.ActionLink
и т. д. должны выполнить поиск в этой таблице, чтобы убедиться, что они выдают максимально короткий URL-адрес (с учетом значений по умолчанию). Можете ли вы опубликовать пример ваших пользовательских URL-адресов и нескольких пользовательских маршрутов, чтобы я мог предложить альтернативу. (например, я добавил только одну дополнительную пользовательскую маршрутизацию для обработки 9 языков в нашей системе). - person Gone Coding   schedule 17.06.2014domain.com/lang/controller/action/id
, где lang — это код ISO, напримерfr
илиfr-FR
? - person Gone Coding   schedule 17.06.2014