0

stackoverflow のように、domain/questions/{id}/{title}

タイトルとして実際に何を送信しても問題ありません。それが質問の実際のタイトルでない場合はredirect 302、正規の URL に自動的に永久に送信されると思います。

これはすべて素晴らしくて素晴らしいです。

私が疑問に思っているのは、質問リストにリンクを作成する方法です。質問IDを持っているだけではURLを作成するのに十分ではないため.

ルーティングを介して自動的に実行できますか?

ある種の大きな辞書を実装する必要がありますか?

質問をリストするすべてのビューにタイトルを渡しますか? そのため、次のような結果@Url.Action("Question", new {id = item.QuestionId, title = item.QuestionTitle.ToPrettyUrl()});になります: リンク内。

これに似たシナリオを作成する必要があり、今は考えられない舞台裏や解決策の背後にある魔法があるかどうかを知りたいと思っています.

4

2 に答える 2

0

Stackoverflow は、社内の属性ルーティング コードを使用します。

http://attributerouting.net/ Attribute Routingの機能に似たもの。

これは MVC 5 でも出荷されます。

于 2013-08-09T02:18:49.513 に答える
0

はい、リンクをレンダリングするときはいつでも、あなたが持っているのと同じようにタイトルを指定する必要があります.

もちろん、いつでもヘルパー メソッドを作成してこれらのリンクを作成し、パラメータを渡すだけで、常にわかりやすいタイトルを含めることができます。

リダイレクトに関しては、StackOverflow は一時的な 302 リダイレクトではなく、永続的な 301 リダイレクトを行います。

これに対する私の一般的なアプローチは次のとおりです。

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)
}
于 2013-08-09T00:28:00.643 に答える