Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将路由映射到.NET MVC中的索引操作_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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呢?:)