2014-10-17 4 views
0

У меня есть контроллер под названием AccountController, который обрабатывает связанные с пользователем действия. я определил метод:ASP.NET MVC-контроллер и маршрутизация

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

Почему следующий URL без token указанный будет вызывать выше действия? 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 } 
     ); 
    } 
} 

Может кто-нибудь помочь? Благодаря!

+0

Извините, я новичок в ASP.NET MVC. Можете ли вы предложить мне, как это сделать? Я обновил конфигурацию маршрутизации выше. Пожалуйста, посмотри. – sc1013

ответ

0

Как Войти действия GET HTTP тип запроса http://localhost/Account/Login матчи Имя действия работ и передать нулевое значение параметра token

0

Да, это своего рода, кажется странным. Поскольку C# имеет тип с нулевым значением, было бы неплохо, если бы он принял значение null, когда я указывал 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 
} 
Смежные вопросы