为什么返回RedirectToAction(“/ Index”)工作而RedirectToAction(“Index)”不起作用

时间:2017-03-17 20:30:14

标签: asp.net-mvc-5

很长一段时间,我有一个回归的行动

return RedirectToAction("Index","Vendor");

它按预期工作。完成此功能后,我的Index函数被调用。

然而,最近它停止了工作。同一行代码现在将浏览器定向到网址localhost:67676/Vendor/,我的Index()操作永远不会被调用,页面会显示:

  

HTTP错误403.14 - 禁止

     

Web服务器配置为不列出此目录的内容。

但是,如果我向方法参数添加正斜杠,如

return RedirectToAction("/Index","Vendor");

一切都按预期工作,并调用索引函数。

我知道为什么我现在需要使用"/Index",但"Index"才能使用

1 个答案:

答案 0 :(得分:1)

错误表示您的应用中有一个名为Vendor的文件夹,并且该网址正在尝试导航到该文件夹​​而不是VendorController。要解决此问题,请重命名该文件夹,使其与控制器名称不匹配。

要了解幕后发生的事情,

return RedirectToAction("Index","Vendor");在内部查看匹配的路由定义,并匹配具有defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }的默认路由。由于您将"Vendor"作为控制器传递(与默认值不匹配),因此网址的第一段变为Vendor。并且因为您的传递"Index"作为操作,它与路径匹配,因此不会添加其他段(不需要)。最终网址变为localhost:67676/Vendor,与您的文件夹匹配(因此错误)。

当您使用return RedirectToAction("/Index","Vendor");时,您的传递"/Index"与默认操作("/Index" != "Index")不匹配,因此它会在网址中生成第二段,现在变为localhost:67676/Vendor/Index因为你没有(并且不能)拥有一个名为"Vendor/Index"

的文件夹,它会命中控制器