【问题标题】:strange behaviour of MVC routingMVC 路由的奇怪行为
【发布时间】:2017-09-01 06:00:30
【问题描述】:

我正在阅读 Routing Basics in ASP.NET MVC 的 MVC 路由是如何工作的。

上面写着

除了 {controller} 和 {action} 之外的其他 URL 参数是 可作为参数传递给选定的 Action 方法。

所以我创建了一个参数名称为controller 的动作string 类型。

public ActionResult About(string controller, string test)
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

当我看到 controller 的值时,它是 Home,这是我的控制器名称。

但是当我试图从这两个方法中访问时,它返回 null。 为什么

  • Request.Params["controller"]
  • Request.QueryString["controller"]

如果没有从上述方法中选取controller参数的值,那么从哪里获取controller值。

我使用此操作链接来调用操作。

 <a href="@Url.Action("About", "home", new { controller  ="Hello" , test ="Amit"})">Check</a>

【问题讨论】:

  • 你所说的“控制器值”是什么意思?
  • @ihavenokia : 它是名为 About 的动作的参数名称
  • 我在小提琴中查看并测试了上面给出的Url.Action,链接帮助 URL 转换为/Home/About?test=Amit,忽略了Hello 字符串(但奇怪的是Hello 在操作方法中成功捕获)。似乎Request.Params["test"]Request.QueryString["test"] 分配结果为Amit 字符串。
  • 这是预期的行为。在构建 url 时,controllerNameactionName 参数的值将与您的 routeValues 参数合并。 controllerName 值会覆盖您的 `routeValues.xml 中的 controller 值。您可以检查source code here
  • 如果你省略了controllerName - @Url.Action("About", new { controller ="Hello" , test ="Amit"})",你会看到它会生成../Hello/About?test=Amit,这会导致404(假设你没有HelloController

标签: c# asp.net asp.net-mvc asp.net-mvc-4 routing


【解决方案1】:

您可以使用获取控制器和操作值

string actionName = HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString();

string controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

【讨论】:

  • 这不是 OP 所要求的
猜你喜欢
  • 2016-09-25
  • 2016-11-28
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2013-08-15
  • 2014-10-23
  • 2017-08-06
相关资源
最近更新 更多