Asp.Net MVC4中的路由

本文关键字:路由 MVC4 Net Asp | 更新日期: 2023-09-27 18:26:23

我收到"VirtualPath must be a non-empty string starting with ~/."错误

描述:在执行期间发生未处理的异常当前web请求。请查看堆栈跟踪以了解更多信息有关错误的信息以及错误在代码中的来源。

异常详细信息:System.ArgumentException:VirtualPath必须是以~/开头的非空字符串。参数名称:virtualPath

在以下代码中:

public class RouteTableHelper
    {
        public static RouteCollection UserSiteRoutes()
        {
            RouteCollection routes = new RouteCollection();
            RegisterRoutes(routes);
            return routes;
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
              ...............
            routes.MapPageRoute("catalogAnnualreport2013", "catalog/annualreport2013", "www.facebook.com");
            .............
        }
   }

Asp.Net MVC4中的路由

根据MSDN,第三个参数应该是一个虚拟url(包括应用程序根~)。因此参数的名称为:physicalFile

类似于:

routes.MapPageRoute( "catalogAnnualreport2013" // routeName
                   , "catalog/annualreport2013" // routeUrl
                   , "~/yourPage.aspx" // physicalFile
                   );

其中yourPage.aspx是您自己的ASP.NET ASPX页面之一。您无法路由到外部url,如问题中的www.facebook.com

所有重定向到外部源的操作都需要通过控制器操作(使用Controller.Redirect)或ASPX页面或ASHX处理程序中的Response.Redirect来完成。

路由不会扩展到您自己的站点。使用标准MVC路由设置并进行控制器操作将用户重定向到Facebook是否更好?

public class CatalogController:Controller
{
    public ActionResult Annualreport2013()
    {
        return Redirect("http://www.facebook.com");
    }
}

我认为MapPageRoute仅用于WebForms路由(MSDN文档)。我一直在MVC应用程序中使用MapRoute扩展。