我正在寫一個新的asp.net mvc應用程序,我一直在玩弄讓我的用戶發佈簡短的簡明網址到他發佈的內容的想法。這些簡短的網址將在Twitter和評論區等侷促空間中得心應手。我喜歡這個想法,因爲我不是網絡縮寫者的忠實粉絲,因爲他們太模糊,而且你也不知道你會得到什麼。它做了301重定向到發送帶動作過濾器的301重定向可以嗎?
http://domain.com/p/234
:如果不使用短網址我想給我的客戶發佈的能力
http://domain.com/2009/08/10/this-is-the-content-title
現在,這是一個非常簡單的過程有一些額外的路線和一個自定義的ActionResult。我實現的自定義ActionResult是一個RedirectToRouteResult的擴展方法......它非常簡單,但大約有20行代碼。我玩弄同樣的功能,只有這次用ActionFilter。我的行爲過濾器看起來像:
public class PermanentRedirectAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.StatusCode = 301;
}
}
和我的操作方法看起來像(我刪除了一堆代碼,以簡化):
[PermanentRedirect]
public ActionResult ShortUrl(int id)
{
return RedirectToAction("Post", id);
}
我的問題是這樣的:我錯過了什麼或者是這簡單?我發現一些其他人正在尋找類似的東西,他們總是創建一個自定義的ActionResult。除了使用較少的整體代碼外,考慮到這種行爲可能需要在其他操作方法的其他地方使用,我不明白爲什麼它不應該是ActionFilter。據說我對Request和Response對象相當陌生,所以我不確定我是否缺少某些東西。
我打算假設由於缺乏迴應,沒有人對此有任何問題。如果遇到此實現的任何障礙,我會放下一行。 – 2009-12-12 04:49:12
這似乎是相當不錯的解決方案,我只是想知道你是否僅僅爲了SEO的原因而這樣做StatusCode = 301,據我所知你會將這個資源作爲一個API公開,所以短URL只會接受HTTP POST和它的不打算將其用作抓取工具和一般用戶的GET。 – JOBG 2009-12-13 05:41:49
你對SEO的原因是正確的。我希望他能夠在Twitter上發佈http://domain.com/p/245,而不必使用縮寫,並且仍然可以通過http:// 2009/12/12/any將搜索引擎索引。我對你的GET和POST思想感到困惑。我有這個目前作爲一個GET的短URL路由,然後做301重定向。不知道你將如何實現這與POST。 – 2009-12-14 04:54:41