我的MVC路由有点生疏。
我正在使用
的默认路线routes.MapRoute(
"Default",
"{controller}/{action}",
new
{
controller = "Default",
action = "Index",
});
我有一个控制器:
public class SomeController : Controller
{
public async Task<ActionResult> Index()
因此,通常情况下,可以使用http://mydomain/Some/Index
- 或 - http://mydomain/Some
在这个特定的控制器上,我想要拒绝(404)〜/ Some / Index或者只是将〜/ Some / Index重定向到〜/ Some。
这在控制器中相对容易实现:
public async Task<ActionResult> Index()
{
var p = Request.Url.Segments;
var last = p.Last();
if(string.Equals(last, "index", StringComparison.InvariantCultureIgnoreCase))
{
return RedirectToActionPermanent("Index");
}
但现在似乎控制器受到跨领域问题的污染。有更清洁的方式吗?
答案 0 :(得分:1)
是的,有更清洁的方式 -
选项1 - You can use HTtpModule for Permanant redirection
选项2 - Use UrlRewriter
选项3 - You can also implement an Action Filter in which you can redirect
答案 1 :(得分:0)
所以,如果我在默认路由上添加另一条路径,将此特定网址转储到不存在的控制器/动作上,那么我会得到一个可爱的404.完美。
routes.MapRoute(
"SomeIndexDeny",
"Some/Index",
new
{
controller = "NonExistentController",
action = "NonExistentMethod"
});
routes.MapRoute(
"Default",
"{controller}/{action}",
new
{
controller = "Default",
action = "Index",
});