Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC控制器和路由_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ASP.NET MVC控制器和路由

Asp.net mvc ASP.NET MVC控制器和路由,asp.net-mvc,Asp.net Mvc,我有一个名为AccountController的控制器,它处理与用户相关的操作。 我还定义了一个方法: // // GET: /Account/Login public ActionResult Login(string token) { //logic here } 为什么没有指定标记的以下URL会调用上述操作? http://localhost/Account/Login 我希望URL像http://localhost/Account/Login?token=abcdefgh仅调用

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

//
// GET: /Account/Login
public ActionResult Login(string token)
{
    //logic here
}
为什么没有指定
标记的以下URL会调用上述操作?
http://localhost/Account/Login

我希望URL像
http://localhost/Account/Login?token=abcdefgh
仅调用操作

这是我的路由配置:

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 }
        );
    }
}

有人能帮忙吗?谢谢

作为登录操作
GET
http请求类型
http://localhost/Account/Login
匹配动作名称,并将空值传递给
标记
参数是的,这看起来有点奇怪。因为C#有一个可为null的类型,所以当我指定
string时,如果它接受null就好了?标记
,并强制我在指定
字符串标记
时指定一个值

这就是为什么我喜欢新的基于属性的路由,它正好具有这种行为。它已被捆绑到最新版本的Web API中。如果您仍在使用旧版本,则可以使用此Nuget软件包-

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

[GET("account/token"]
public ActionResult Login(string token)
{
    //logic here
}
[GET("account/token?"]
public ActionResult Login(string token)
{
    //logic here
}
要使其可选,您可以编写

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

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