为什么返回RedirectToAction(“/索引”)的工作,RedirectToAction(“指数)”不行
很长一段时间,我有一个返回为什么返回RedirectToAction(“/索引”)的工作,RedirectToAction(“指数)”不行
return RedirectToAction("Index","Vendor");
一个动作,它的工作如预期。在完成此功能后,我的索引函数被调用。
但是,最近它停止了工作。同样的代码行现在指示浏览器的URL localhost:67676/Vendor/
,我Index()
行动,不会被调用的页面显示:
HTTP错误403.14 - 禁止
Web服务器被配置为不列出内容这个目录。
但是,如果我正斜杠添加到方法的参数,如
return RedirectToAction("/Index","Vendor");
一切正常和指数函数被调用。
任何想法,为什么我现在需要使用"/Index"
但"Index"
错误之前的工作意味着你必须在你的应用程序名为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"
的文件夹
您是否向名为'Vendor'的应用程序添加了一个文件夹? –
是的,当然。你知道为什么(“/ Index”)起作用,但是(“Index”)不起作用? – user111
然后我假设你意味着你有一个名为'Vendor'的文件夹(这是个问题 - 只需将它重命名为其他东西,它就可以正常工作)。正如消息告诉你的,你的url重定向到一个文件夹,而不是控制器方法。 –