在Asp.Net MVC4中路由

时间:2014-10-13 13:30:46

标签: c# asp.net asp.net-mvc

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

  

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

     

异常详细信息:System.ArgumentException:VirtualPath必须是a   以〜/开头的非空字符串。参数名称: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");
            .............
        }
   }

3 个答案:

答案 0 :(得分:3)

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

类似的东西:

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

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

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

答案 1 :(得分:2)

路由不会超出您自己的网站。可能最好使用标准MVC路由设置并制作控制器动作,将用户重定向到Facebook?

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

答案 2 :(得分:1)

我相信MapPageRoute仅用于WebForms路由(MSDN docs)。我一直在MVC应用程序中使用MapRoute扩展名。