Когда все остальное терпит неудачу, я использую это:
var isObject = function(item) {
return item.constructor.name === "Object";
};
В примере с вопросом о переполнении стека, подобным этому, URL-адрес:
so.com/questions/1142480/adding-redundant-information-to-a-mvc-route
Однако функциональная часть URL-адреса:
Это достигается путем определения маршрута следующим образом:
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
}
}
Вы должны понимать, что текст в конце этот URL на самом деле фиктивный. Например, этот URL:
ясно откроет этот вопрос. Точно так же заголовок, отличный от вашего вопроса:
ТАКЖЕ откроет этот вопрос без ошибок.
Вы можете легко использовать некоторый алгоритм разбора заголовка для создания "дружественного к SEO" URL Для вас заполните заголовок и добавьте его в конце номера вопроса. Ваш маршрут MVC просто проигнорирует последнюю часть.