我做了一个查询的功能。
我用string id,因为我要用默认的路由。
[ValidateInput(false)]
public ActionResult Search(string id)
{
}
==>>
如果我用post:
<form method="post" action="/tag/search/">
<input type="text" id="id" name="id" />
<input type="submit" value="查询" />
</form>
比如用户输入“你好”后,虽然能正常查询出数据,但是URL地址不会路由到 /tag/search/你好
如果我用get:
<form method="get" action="/tag/search/">
<input type="text" id="id" name="id" />
<input type="submit" value="查询" />
</form>
产生的URL地址是: /tag/search/?id=你好, 这时如果直接在地址栏中敲入/tag/search?id=你好 或者 /tag/search/你好 ,这样的都能访问,也都能取到数据,这样就造成一个内容多个地址的问题,对SEO不好。
所以这个问题该怎么解决?
1. 添加一个Action:public ActionResult SearchRedirect(string id) {}
2. 表单提交到这个Action:<form method="post" action="/tag/SearchRedirect/">
3. 在SearchRedirect Action中重定向至Search Action:Response.Redirect("/tag/search/" + id);
解决了。你太厉害了。在.net 4.0中有RedirectPermanent,是301永久转向,Redirect是302。
@abc54288: 嗯,用RedirectPermanent更好
一般都用这种:/tag/search?id=你好
我知道,可目前是MVC3啊,所以不想用带?的url
对于用户输入的数据不适合作为路径也就是不适合‘/tag/search/你好’这样的URL