我正在写一个新的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