如何将不匹配的路由映射到该控制器的索引操作?
我正在使用客户端路由器来处理/Home/foo
routes.MapRoute(
name: "Test",
url: "{controller}/{*.}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
目前这会产生404。
答案 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了解详情。