質問IDのみを入れた場合、どうすればURL書き換えを実行できますか?stackoverflow URL書き換え
questions/{id}/{question-slug}
へ
questions/{id}/{whatever}
私はMVCでいくつかの時間のために働いてきたし、それが提供するIDに基づいて適切なコンテンツを拾うように、私はそれは(ルート、アクション、すべてを)働いています。
しかし、{id}
後の部分は、(スラグ部分)に入力したのと同じままです。誰かがcontent/5/foobar
で入力したのであれば、それは適切なコンテンツが表示されますが、そこにfoobar
を残すだろう。
私はDBに入り、右のスラッグを引き出し、ルートデータに入れて、この正しいデータで同じアクションにリダイレクトする必要があるでしょう。 、 私は推測する?
これは、実行結果オーバーライドによる試行です。それは動作しますが、リダイレクトまたは交換/ブラウザに正しいURLが表示されません。
protected override void Execute(System.Web.Routing.RequestContext requestContext) {
if (requestContext.RouteData.Values["id"] != null) {
string currentSlug = _repository.Find(int.Parse(requestContext.RouteData.Values["id"].ToString())).Slug;
if (requestContext.RouteData.Values["slug"] != null) {
requestContext.RouteData.Values.Remove("slug");
}
requestContext.RouteData.Values.Add("slug", currentSlug);
}
base.Execute(requestContext);
}
あなたはそれが何を見て、私が何をしたいのアイデアを得ることができるので、これは、うまく働いて、Display
アクションのバージョン別です:
//
// GET: {culture}/directory/5/{slug}
public virtual ActionResult Display(int id, string slug)
{
var model = _repository.Find(id);
if (model != null) {
if (!model.Slug.Equals(slug, System.StringComparison.OrdinalIgnoreCase)) {
return RedirectToActionPermanent(pndng.DirectoryEntry.ActionNames.Display, pndng.DirectoryEntry.Name, new { id = model.Id, slug = model.Slug });
}
return View(model);
}
// no model found
return InvokeHttp404(HttpContext);
}
この1つは(それは私が何をしたいん)恒久的なリダイレクトを実行しますが、それが正しいのですか? ブラウザのURLを更新するためにリダイレクトが必要なのでしょうか?
あなたが必要['RedirectResult'](http://msdn.microsoft.com/en-us/library/system.web.mvc.redirectresult.aspx)を使用してください。 – Oded