注意:这不是另一个问题的重复,因为我的第一页工作正常,其他页面/操作无效。
到目前为止,我已准备好很多帖子,但没有任何结果。在我的开发盒上本地运行时,这很好用。复制到服务器后,我看到了问题。我的默认路由工作正常,我得到了预期的索引页。
public ActionResult Index()
{
return View();
}
我的RouteConfig包含:
routes.MapRoute(
name: "AnnualFees",
url: "{controller}/{action}/{id}",
defaults: new { controller = "AnnualFees", action = "Index", id = UrlParameter.Optional }
);
当我想要接触除索引以外的任何内容时出现问题。例如,此操作会导致404未找到错误:
public ActionResult renderForm()
{
return PartialView("_formPanel");
}
再次,在我的本地开发盒上应该正常工作。但是在服务器上我得到请求的URL:/ AnnualFees / renderForm 404错误无法找到资源。
更新
好的,做了更多的研究和反复试验,我发现了一些东西,还有更多要补充的内容。
此应用程序在IIS的当前网站下运行,我在网站根目录下创建了一个虚拟文件夹/应用程序。如果我导航到www.mysite.com/AnnualFees,我会按预期获得MVC应用程序的第一页。但是,我可以在AnnualFeesController中获得任何其他操作的唯一方法,我必须将控制器名称加倍,例如www.mysite.com/AnnualFees/AnnualFees/renderForm,它可以工作,但是很难看并且不太正确。我怎样才能摆脱冗余?
答案 0 :(得分:1)
因此,正如我在评论中所指出的那样,问题在于你有一个文件夹,并且在它下面就是路径。如果您不提供路线的任何部分,只需致电
www.mysite.com/AnnualFees
这将使用路由配置中指定的所有默认值,您将获得默认页面。但是,如果您键入
www.mysite.com/AnnualFees/ActionName
MVC将其视为控制器ActionName,并且没有提供任何操作ID。这在您的应用中不存在,因此是错误。
这里的根本问题是网站不应该存在于文件夹下,它们应该存在于顶级域名之下。也就是说,不希望站点根URL为www.mysite.com/AnnualFees
,它应该只是www.mysite.com
。但即使没有你的主控制器和IIS文件夹具有相同的名称也会没问题,从而产生不必要的重复。
但是,您可以更改路线以使AnnualFees成为默认控制器。只需删除控制器部件,如下所示:
routes.MapRoute(
name: "AnnualFees",
url: "{action}/{id}",
defaults: new { controller = "AnnualFees", action = "Index", id = UrlParameter.Optional }
);
现在你应该可以使用
了www.mysite.com/AnnualFees/ActionName
再次注意,在上面的URL中,“AnnualFees”不是控制器名称,实际上它根本不可见MVC应用程序。
但有一点需要注意。想象一下,你需要添加另一个控制器。现在,默认且唯一的路由不适用于它。关键是为这个控制器提供一个单独的路径,带有硬编码的第一部分
routes.MapRoute(
name: "NewControllerRoute",
url: "NewControllerName/{action}/{id}",
defaults: new { controller = "NewController", action = "Index", id = UrlParameter.Optional }
);
确保将此路由置于默认路由之前,以便正确路由对此控制器的所有请求,并将所有其他请求转至“AnnualFees”。