【问题标题】:ASP.NET MVC: all controller values are passed nullASP.NET MVC:所有控制器值都传递为 null
【发布时间】:2017-07-15 14:33:56
【问题描述】:

我已向我的 asp.net mvc 应用程序添加了新操作,并在 RouteConfig.cs 中为其添加了特定规则。

但是所有参数都作为null传递。

这是我的路线规则:

routes.MapRoute(
     "toekn_submit_route",
    "{controller}/SendToken/{platform}/{token}/{uid}", 
    new { controller = "Home", action = "SendToken" }
    , new[] { "MvcApplication.Controllers" }
);

这里是动作减速:

public JsonResult SendToken(string platform, string token, string uid) { ... }

我使用此 URL 调用操作:http://localhost:51650/Home/SendToken/platform/token/uid

【问题讨论】:

  • @RahulSingh 抱歉,我无法理解您的问题。你能解释更多吗?
  • 我的意思是你没有 action 这样的占位符:- "{controller}/{action}/{platform}/{token}/{uid}"
  • @RahulSingh 操作在我的 url 中硬编码并在路由参数中定义。

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


【解决方案1】:

添加路线的顺序很重要。第一个匹配的路线获胜。

确保在更通用的路由之前添加此添加的路由,否则它们将被另一个不会按预期填充占位符的路由匹配。

routes.MapRoute(
    name: "token_submit_route",
    url: "{controller}/SendToken/{platform}/{token}/{uid}", 
    defaults: new { controller = "Home", action = "SendToken" },
    namespaces: new[] { "MvcApplication.Controllers" }
);

//...other more general routes.

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

例如,如果 Default 路由放在令牌路由之前,它仍然会匹配 http://localhost:51650/Home/SendToken/platform/token/uid

在哪里

controller = "Home", 
action = "SendToken", 
id = "platform/token/uid"

【讨论】:

  • 所有问题是我错过了将 uid 作为第三个参数传递,因此没有触发此路由规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多