Добавление избыточной информации к маршруту MVC

Когда все остальное терпит неудачу, я использую это:

var isObject = function(item) {
   return item.constructor.name === "Object";
}; 
5
задан Damien 17 July 2009 в 10:21
поделиться

2 ответа

В примере с вопросом о переполнении стека, подобным этому, URL-адрес:

so.com/questions/1142480/adding-redundant-information-to-a-mvc-route

Однако функциональная часть URL-адреса:

so.com/questions/1142480

Это достигается путем определения маршрута следующим образом:

routes.MapRoute(
    "questions",
    "questions/{id}/{title}",
    new { controller = "Questions", action = "Details", title = "" });

Затем вы создаете ссылку на него следующим образом :

<%= Html.RouteLink("Adding Redundant Information to a MVC Route", 
        new 
        { 
            controller = "Questions", 
            id = 1142480, 
            title = "adding-redundant-information-to-a-mvc-route" 
        }
    )
%>

Я бы предположил, что заголовок URL создается из фактического заголовка с помощью нижнего регистра, заменяя пробелы дефисами и парой других вещей (экранирование / чередование плохих символов).

Пока ваш маршрут SEO появляется перед любым будет использоваться другой совпадающий маршрут, маршрут SEO.

Для полной ясности контроллер на самом деле будет таким:

public class QuestionsController : Controller
{
    public ActionResult Details(int id)
    {
        // stuff for display - notice title is not used
    }
}
6
ответ дан 14 December 2019 в 04:45
поделиться

Вы должны понимать, что текст в конце этот URL на самом деле фиктивный. Например, этот URL:

ясно откроет этот вопрос. Точно так же заголовок, отличный от вашего вопроса:

ТАКЖЕ откроет этот вопрос без ошибок.

Вы можете легко использовать некоторый алгоритм разбора заголовка для создания "дружественного к SEO" URL Для вас заполните заголовок и добавьте его в конце номера вопроса. Ваш маршрут MVC просто проигнорирует последнюю часть.

2
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: