2013-08-08 5 views
0

Like StackOverflow, у вас есть domain/questions/{id}/{title}ASP.NET MVC Как создать ссылки на действия, основанные на маршрутизации

Это не имеет значения, что вы на самом деле отправить в качестве заголовка, если это не фактическое название вопроса, он автоматически делает a Постоянный redirect 302 Я думаю, канонический url.

Это все хорошо и здорово.

Что мне интересно, как они создают ссылки в листинге вопроса. Поскольку идентификатор вопроса недостаточно для создания URL-адреса.

Может быть сделано автоматически через маршрутизацию?

Должен ли внедрить какой-либо большой словарь?

Вы передаете заголовок всем представлениям, которые перечислили вопросы? , так что вы получите что-то вроде: @Url.Action("Question", new {id = item.QuestionId, title = item.QuestionTitle.ToPrettyUrl()}); в ваших ссылках.

Мне нужно создать сценарий, подобный этому, и мне очень интересно узнать, есть ли какая-нибудь магия за кулисами или решением, о которых я не могу сейчас думать.

ответ

0

Stackoverflow использует атрибут Inhouse маршрутизации кода.

Нечто похожее на то, что http://attributerouting.net/ Атрибут Маршрутизация делает.

который также будет отправлен в MVC 5.

0

Да, всякий раз, когда вы оказываете ссылку, вам нужно указать заголовок так же, как и у вас.

Конечно, вы всегда можете создать вспомогательный метод для создания этих ссылок и просто перейти к параметрам, чтобы убедиться, что вы всегда включаете дружественный заголовок.

Что касается перенаправления, StackOverflow выполняет 301 постоянную переадресацию, а не 302 временный.

Мой общий подход к этому было бы следующим образом:

public ActionResult QuestionDetail(int id, string title) 
{ 
    var question = service.GetQuestion(id); 

    if(title != question.Title.ToPrettyUrl()) 
    { 
    var redirUrl = string.Format("/question/{0}/{1}", id, question.Title.ToPrettyUrl()); 
    return RedirectPermanent(redirectUrl); 
    } 

    return View(question) 
}