asp.net MVC 5中的默认动态+静态路由

时间:2015-01-18 10:29:55

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

当我运行我的应用程序时,我在地址栏中获得了以下URL。

http://Localhost/

应用程序默认路由,

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Login", 
                action = "Login", id = UrlParameter.Optional }
            );

但我想设定的是,

当我运行我的应用程序时,我希望看到这样的URL,

http://localhost/clientName/login  (I want to display this fixed URL on start up of application)

让我们说,此时用户会显示登录屏幕。在登录屏幕上方" ClientName"显示。

现在我的要求是,用户应该能够调整这个" ClientName"。

例如。如果用户输入John作为clientName,则在登录屏幕上方应显示John。

我希望我能清楚自己的要求。

现在我能够动态获取clientName。因为我已经设定了以下路线。

routes.MapRoute("Customers", "{customer}", new { controller = "Login", action = "Login" }, null);

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Login", 
                action = "Login", id = UrlParameter.Optional }
            );

我的LoginController,

public ActionResult Login(string returnUrl, string customer)
{
    if(ClientExists(customer)) //Check against DB or list or any other variable
    {
        //Do some custom logic
    }
    ViewBag.ReturnUrl = returnUrl;
    return View();
} 

请点击此链接http://www.codeproject.com/Tips/825266/ASP-NET-MVC-Dynamic-Routing以获取更多参考资料。

有了这个,我从来没有看到" returnUrl"登录actionMethod。

的参数

那么首先如何设置固定的URL? 第二,如何从URL动态更改和获取clientName(如果已更改)?

2 个答案:

答案 0 :(得分:0)

我只能用这个帮助你:I never see any value in "returnUrl" parameter of Login actionMethod.

您无法获得returnUrl的任何值,因为您使用的绑定错误,或者不使用它。

MVC绑定如何工作?很简单。

让我们拿走您的代码:



public ActionResult Login(string returnUrl, string customer)




此方法会在从任何地方调用此方法时,在调用网址中查找类似returnUrlcustomer的内容。

让我们想象一下我们称之为:http://localhost:port/Login/Login。 这将来到您的Login方法,它将尝试分析它并检查是否有任何参数与它一起发送。在这种情况下,没有发送参数,也不会将任何内容绑定到string

但是,如果我们调用此路径:http://localhost:port/Login/Login?returnUrl=something&customer=customerName,这将触发您拥有的精确Login方法,并将绑定正确的值。因此,在string returnUrl中,您将拥有"某些内容",并且在string customer中您将获得值" customerName"。

答案 1 :(得分:0)

尝试按如下方式设置您的路线(我在VB中编写我的路线,但您应该能够轻松翻译):

routes.MapRoute(
        name:="Customers",
        url:="Customers/{*pathInfo}",
        defaults:=New With {.controller = "Customers", .action = "Login"}
    )

要访问它,只需访问:

http://yoursite.com/Customers/John/JohnsHomePage

然后,您的客户控制器将具有如下的Login方法:

Function Login(ByVal pathInfo As String) As ActionResult
    ' Use your path info to extract your information
    ' It will only contain the part of the URL past the /Customers path
    ' Parse pathInfo to get returnUrl

    ' Do your page work
    Response.Redirect(returnUrl)
End Function

将客户网址路径更改为登录或其他内容。