【问题标题】:ASP.NET MVC controller and routingASP.NET MVC 控制器和路由
【发布时间】:2014-11-21 15:50:35
【问题描述】:

我有一个名为AccountController 的控制器,它处理与用户相关的操作。 我还定义了一个方法:

//
// GET: /Account/Login
public ActionResult Login(string token)
{
    //logic here
}

为什么没有指定token 的以下 URL 会调用上述操作? http://localhost/Account/Login

我希望像 http://localhost/Account/Login?token=abcdefgh 这样的 URL 只调用该操作。

这是我的路由配置:

public class RouteConfig
{
    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 }
        );
    }
}

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 对不起,我是 ASP.NET MVC 的新手。你能建议我怎么做吗?我已经更新了上面的路由配置。请看。

标签: asp.net-mvc


【解决方案1】:

作为登录操作GET http 请求类型 http://localhost/Account/Login 匹配动作名称作品并将空值传递给token 参数

【讨论】:

    【解决方案2】:

    是的,它确实有点奇怪。由于 C# 有一个可为空的类型,如果它在我指定 string? token 时接受 null 并在我指定 string token 时强制我指定一个值,那就太好了。

    这就是为什么我喜欢具有这种行为的基于新属性的路由。它已捆绑到最新版本的 Web API 中。如果你还在使用旧版本,你可以使用这个 Nuget 包 - http://attributerouting.net/

    要强制用户指定令牌,您可以编写

    [GET("account/token"]
    public ActionResult Login(string token)
    {
        //logic here
    }
    

    要让它成为可选的,你可以写

    [GET("account/token?"]
    public ActionResult Login(string token)
    {
        //logic here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2011-03-06
      相关资源
      最近更新 更多