【问题标题】:MVC return RedirectToAction("Index") throws HTTP Error 403.14 - ForbiddenMVC 返回 RedirectToAction("Index") 抛出 HTTP 错误 403.14 - 禁止
【发布时间】:2015-04-18 17:56:53
【问题描述】:

有很多类似的问题,但没有一个答案对我有用。我正在尝试返回 'RedirectToAction("Index");'当用户无权创建新小部件时,它位于同一控制器中,来自“public ActionResult Create()”。我没有其他名为 Index 的文件夹,尽管其他控制器中还有其他“Public ActionResults Index()”功能。任何建议将不胜感激......谢谢

【问题讨论】:

  • 完整显示您的代码。你确定你引用了你想重定向到的正确控制器吗?
  • 运行 fiddler 并查看浏览器和服务器交换的请求和响应。如果您无法理解它们,请在此处发布
  • 听起来你的控制器顶部有一个AuthorizeAttribute .. 使Index 也需要授权 - 所以重定向到那是没有意义的。不过,您需要显示一些代码。
  • 正如 Simon 所说(双关语),还要检查您是否在 FilterConfig.RegisterGlobalFilters 方法中添加了 AuthorizeAttribute,这适用于整个网站。
  • 您在使用 IIS 吗?如果是这样,您应该检查您启用了哪些身份验证模式,例如Windows 身份验证、基本等

标签: c# asp.net-mvc


【解决方案1】:

我试图复制您的场景,但无济于事。 带有 Test 控制器的新 MVC5 项目在这两个操作上都尝试了 Authorize 属性,只是为了测试,但如果您无权查看资源,它们实际上会将您重定向到登录页面。

HTTP 403.14 是目录列表被拒绝的代码。 在我看来,您正在重定向到一个未被 MVC 处理的 URL,而是被您的 IIS express 选择,默认情况下不允许列出目录内容。

所以要考虑的问题是: 1:您调用的确切网址是什么。 2:您的路由设置如何,您有自定义路由吗?路线的顺序很重要。

为了能够为您提供更多信息,请务必发布控制器代码以及您的 RouteConfig.cs 文件。

这里是测试代码。

public class TestController : Controller
{
    // GET: Test
       [Authorize] // just redirects back to login page if you call create action. 
    public ActionResult Index()
    {
        return View();
    }


    // GET: Test/Create
    public ActionResult Create()
    {
        return RedirectToAction("Index"); 
    }

}

这是路由配置文件。不变。

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多