C# 将路由映射到.NET MVC中的索引操作
如何将不匹配的路由映射到该控制器的索引操作 我正在使用客户端路由器进行路由,如C# 将路由映射到.NET MVC中的索引操作,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,如何将不匹配的路由映射到该控制器的索引操作 我正在使用客户端路由器进行路由,如/Home/foo routes.MapRoute( name: "Test", url: "{controller}/{*.}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 这将导致404。我将创建一个用于处理您的案例的。然后可以使用该属性装饰控制器 下面是一个
/Home/foo
routes.MapRoute(
name: "Test",
url: "{controller}/{*.}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这将导致404。我将创建一个用于处理您的案例的。然后可以使用该属性装饰控制器
下面是一个基于路由中的值重定向操作的小示例:
[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();
}
}
我会创造一个新的团队来处理你的案子。然后可以使用该属性装饰控制器
下面是一个基于路由中的值重定向操作的小示例:
[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();
}
}
您使用的路由是正确的,问题是需要以写入格式添加的路由顺序: 例如,如果您有一些路线,如:
routes.MapRoute(
name: "PreTest",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Test",
url: "{controller}/{*.}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
因此,它总是与第一个路径预测试相匹配。检查您的路线顺序。它就像一本订购的字典。查看更多信息。您使用的路由是正确的,问题在于需要以写入格式添加的路由顺序: 例如,如果您有一些路线,如:
routes.MapRoute(
name: "PreTest",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Test",
url: "{controller}/{*.}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
因此,它总是与第一个路径预测试相匹配。检查您的路线顺序。它就像一本订购的字典。查看更多信息。您能展示RouteConfig吗?有几种可能的解决方案,但我喜欢为这类事情编写自定义中间件。对于.NETCore,您使用的是哪个版本的MVC?@billybobMVC5@nurdyguy我懂了。那么.NETMVC呢?:)你能展示RouteConfig吗?有几种可能的解决方案,但我喜欢为这类事情编写自定义中间件。对于.NETCore,您使用的是哪个版本的MVC?@billybobMVC5@nurdyguy我懂了。那么.NETMVC呢?:)