asp mvc4 html帮助器没有导航到预期的页面

时间:2016-09-08 22:00:45

标签: asp.net asp.net-mvc asp.net-mvc-4 razor html-helper

我正在使用以下代码生成链接

@Html.ActionLink("Search", "Index", "Properties")
在客户端

呈现

<a href="/Properties">Search</a>

看看上面的链接,我希望能够

controller: Properties

action: Index

当我点击链接时,我导航到http://localhost:49878/Properties/并收到错误

  

HTTP错误403.14 - 禁止访问   Web服务器配置为不列出此目录的内容。

如果我导航到http://localhost:49878/Properties/Index,我会收到预期的页面。

为什么?

我看过RouteConfig试图理解这一点并查看默认路线

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

我认为下面会解决这个问题,但事实并非如此,为什么?

routes.MapRoute(
    name: "Search",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Properties", action = "Index", id = UrlParameter.Optional }
);

2 个答案:

答案 0 :(得分:1)

您不能使用属性,因为它是具有AssemblyInfo.cs的文件夹的名称。所以有限制的名字。

将此添加到

routes.RouteExistingFiles = true; 

RegisterConfig中的RegisterRoutes忽略物理路径(虽然这会对静态文件产生一些复杂性,但要对其进行彻底测试)。

更好的方法是重命名控制器并使用它,不确定是否还有其他事情可以完成。

答案 1 :(得分:1)

您只能在解决方案中看到这样的“属性”文件夹:

solution

但是如果像这样打开项目文件夹:

filedisk

您可以在两个路径中看到两个文件夹:

<强>根

rootfolder

查看文件夹

viewfolder

路由系统检查文件系统以查看URL是否与磁盘上的文件/文件夹匹配。如果找到匹配项,则忽略路由,并且请求绕过任何路由条目,以便直接提供该文件。

要解决此问题,您可以在RouteExistingFiles中将true属性设置为RouteConfig

routes.RouteExistingFiles = true;