【问题标题】:MVC routing returns 404 withMVC 路由返回 404
【发布时间】:2015-04-08 16:02:33
【问题描述】:

我有问题

我正在尝试设置以下路线:

routes.MapRoute(
                name: "PublicForms",
                url: "Public/Form/{*parameters}",
                defaults: new { controller = "Form", action = "Index", parameters = UrlParameter.Optional}
               );

但它只在我传递多个参数时才有效

例子:

http://localhost:12982/Public/Form/aaa/bbb 工作

public ActionResult Index(string parameters)
{
    // parameter comes aaa/bbb
}

http://localhost:12982/Public/Form/aaa 不起作用。

它返回一个 404

不应该吗?

public ActionResult Index(string parameters)
{
    // parameter comes aaa
}

【问题讨论】:

  • 参数前好像有个动作。通常我们使用“/”来分隔域项而不是参数。通常在 aspx 中,这是我们传递两个参数 "contoso.com/products.aspx?field1=value1 &field2=value2" 的方式。 & 符号分隔参数,但不分隔“/”。此 url 的最简单含义是“转到 contoso.com 并找到 product.aspx 文件以将其打开。在请求时使用 field1 和 field2 参数”。我认为这会帮助你
  • 嗨@Sandaru,我正在尝试执行本文中关于“处理 URL 模式中可变数量的段”主题的内容。 msdn.microsoft.com/en-us/library/… 但 with 不能只使用一个参数。
  • 您还有其他路线吗?只看一条路由是不可能调试路由问题的,你需要把它们作为一个整体来看待。
  • 在这种情况下,您是否尝试通过清除缓存内存,或者使用单独的浏览器启动它,看看它是否工作。

标签: asp.net-mvc model-view-controller routing routes


【解决方案1】:

如果您尝试使用http://localhost:12982/Public/Form/Index/aaa 会怎样? 在您的情况下,您在 FormController 中调用了一个名为“aaa”的操作,该操作不存在。

【讨论】:

  • 也不行。实际上,如果我将索引放在 URL 中,即使有很多参数,它也会停止工作。
【解决方案2】:

以下代码已经过测试: http://localhost:50956/Public/Form/foo 所以它可能会做一些类似于我认为你正在寻找的事情。希望对您有所帮助。

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute("formPublic",
                   "Public/{*.}",
                    new { controller = "Home", action = "Index" }

                    );


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

【讨论】:

    【解决方案3】:

    我找到了一种不是我想要但有效的方法。

    我不能让动作隐含,所以我必须指定控制器和动作,并在它只有一个时将一个额外的参数作为第一个参数。

    现在,如果我只用一个参数调用服务,它不会返回 404

    routes.MapRoute(
                    name: "OpenForm",
                    url: "public/{controller}/{action}/{arg}/{*parameters}",
                    defaults: new { categorySlug = UrlParameter.Optional ,subCategorySlug = UrlParameter.Optional }
                );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多