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的新手。你能建议我怎么做吗?我已经更新了上面的路由配置。请看。