2017-03-17 97 views
-1

很长一段时间,我有一个返回为什么返回RedirectToAction(“/索引”)的工作,RedirectToAction(“指数)”不行

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

一个动作,它的工作如预期。在完成此功能后,我的索引函数被调用。

但是,最近它停止了工作。同样的代码行现在指示浏览器的URL localhost:67676/Vendor/,我Index()行动,不会被调用的页面显示:

HTTP错误403.14 - 禁止

Web服务器被配置为不列出内容这个目录。

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

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

一切正常和指数函数被调用。

任何想法,为什么我现在需要使用"/Index""Index"

+0

您是否向名为'Vendor'的应用程序添加了一个文件夹? –

+0

是的,当然。你知道为什么(“/ Index”)起作用,但是(“Index”)不起作用? – user111

+1

然后我假设你意味着你有一个名为'Vendor'的文件夹(这是个问题 - 只需将它重命名为其他东西,它就可以正常工作)。正如消息告诉你的,你的url重定向到一个文件夹,而不是控制器方法。 –

回答

1

错误之前的工作意味着你必须在你的应用程序名为Vendor的文件夹,网址为试图导航到该文件夹​​,而不是你的VendorController。要解决该问题,请重命名该文件夹,使其与控制器名称不匹配。

要明白发生了什么幕后,

return RedirectToAction("Index","Vendor");内部看你的路由定义为一根火柴,它具有defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }默认路由匹配。由于您通过"Vendor"作为控制器,它与默认值不匹配,因此url的第一部分变为Vendor。并且由于您的传球"Index"作为动作,因此与路线相匹配,因此不会添加其他细分(不是必需的)。最终的URL变成localhost:67676/Vendor,它与您的文件夹相匹配(因此错误)。

当你使用return RedirectToAction("/Index","Vendor");,你的传球"/Index"不匹配的默认操作("/Index" != "Index"),因此它产生在现在变成localhost:67676/Vendor/Index因为你不这样做,这将打击该控制器(且不能)的URL第2段有一个名为"Vendor/Index"的文件夹