将路由映射到.NET MVC中的索引操作

时间:2017-05-09 18:04:13

标签: c# asp.net asp.net-mvc

如何将不匹配的路由映射到该控制器的索引操作?

我正在使用客户端路由器来处理/Home/foo

等路由
routes.MapRoute(
    name: "Test",
    url: "{controller}/{*.}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

目前这会产生404。

2 个答案:

答案 0 :(得分:0)

我会创建一个AuthorizeAttribute来处理你的案子。然后,您可以使用该属性修饰控制器。

以下是一个小例子,可以根据路线中的值重定向您的操作基础:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class RedirectAttribute:ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if(filterContext.Controller.ControllerContext.RouteData.Values.ContainsValue("Foo"))
        {
            //Redirect to the login for example
            UrlHelper urlHelper = new UrlHelper(filterContext.HttpContext.Request.RequestContext);
            string url = urlHelper.Action("actionName", "controllerName");
            filterContext.Result = new RedirectResult(redirectUrl);
        }
    }
}

以下是如何在控制器中使用它:

[Redirect]
public class MyCustomController : AsyncController
{
    public ActionResult Index()
    {                        
        return View();            
    }
    public ActionResult Foo()
    {
        //It will redirect
        return View();
    }
}

答案 1 :(得分:0)

您使用的路线是正确的,问题是需要以写入格式添加的路线的顺序:

例如,如果你有一些路线,如:

{{ knp_pagination_render(projects) }}

因此它始终与第一条路线 PreTest 相匹配。检查您的路线订单。这就像订购的字典一样。查看this了解详情。