Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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# Html.ActionLink和RedirectToAction在嵌入式路由处理程序中不正确_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# Html.ActionLink和RedirectToAction在嵌入式路由处理程序中不正确

C# Html.ActionLink和RedirectToAction在嵌入式路由处理程序中不正确,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,为了允许在多个web项目之间共享公共资源和视图,我组装了一个包含这些布局的DLL,等等。为了实现这一点,我有一个路由处理程序,它可以查找任何以Embedded/开头的Uri,然后转到自定义处理程序进行处理。这一切都很好地发挥作用,并因此注册: RouteTable.Routes.Insert(0, new Route("Embedded/{*file}", new RouteValueDictionary(new { }),

为了允许在多个web项目之间共享公共资源和视图,我组装了一个包含这些布局的DLL,等等。为了实现这一点,我有一个路由处理程序,它可以查找任何以
Embedded/
开头的Uri,然后转到自定义处理程序进行处理。这一切都很好地发挥作用,并因此注册:

    RouteTable.Routes.Insert(0,
            new Route("Embedded/{*file}",
                new RouteValueDictionary(new { }),
                new RouteValueDictionary(new { }),
                new EmbeddedResourceRouteHandler()));
然而,当我使用
ActionLink
redirectoaction
时,它就会中断。在调试后者时,似乎选择了my
Embedded/
路由作为要使用的路由,因此,我没有得到
{controller}/{action}
的uri,而是得到了
Embedded?controller={controller}&action={action}

电话是:

ActionResult result = RedirectToAction("Expired", "Operations");
如下图所示,这就是路由表的外观。请注意,我的嵌入式系统是第一个:

结果Uri为:


我已经尝试添加嵌入的路由处理程序作为最后一个路由处理程序,但是它从未被调用。如果您需要更多信息,请告诉我!提前感谢。

一个想法可能是将约束应用于其他路由(包括默认路由),并将嵌入的路由放置在路由表的最末端。约束的示例:

routes.MapRoute(
    "Default",                                              
    "{controller}/{action}/{id}",                           
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = "^(?!Embedded).+"}
);

完美的非常感谢-我正要把头发扯下来。@Moo Juice,坦率地说,我不认为这是最好的解决方案,因为它要求每条路线都有约束。应该只有一种方法可以调整嵌入的路由,我想不出一种方法。但是,如果这个解决方案对您有效——太好了。是的——目前,默认路径是唯一的。如果添加了更多的路由,我很可能会将流程混淆为一个自定义的
MapRoute
函数,该函数会自动提供约束,并免除开发人员这样做的责任。