2014-10-17 158 views
0

我有一個名爲AccountController的控制器,它處理用戶相關的操作。 我還定義了一個方法:ASP.NET MVC控制器和路由

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

誰能幫助?謝謝!

+0

對不起,我是ASP.NET MVC的新手。你能建議我該怎麼做?我上面更新了我的路由配置。請參見。 – sc1013 2014-10-17 09:06:19

回答

0

由於登錄行動GET HTTP請求類型 http://localhost/Account/Login比賽動作名工作以及傳遞null值token參數

0

是的,它確實有種似乎不可思議。由於C#有一個可以爲空的類型,如果它指定string? token時它接受空值會很好,並且當我指定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 
}