2012-01-09 92 views
0

我需要开始处理一个包含emailand GUID的URL。有些事情喜欢跟随第一个参数是电子邮件地址,第二个参数是Guid。查询字符串参数错误

http://www.myWebSiteurladdress.com/Account/[email protected]?MyId=222DF915-264E-4034-BF26-22EB1165667C

为此,我已经修改了我的路由如下

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "RouteABC", // Route name 
     "{controller}/{action}/{mail}/{id}", // URL with parameters 
     new { controller = "Account", action = "MyActionMethod", mail = string.Empty, id = Guid.Empty } // Parameter defaults 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
} 

然后,我有我的操作方法如下图所示。

public class AccountController : Controller 
    { 
     public ActionResult MyActionMethod(string email, Guid id) 
     { 

      ............ 
     } 

问题是,当我走在上面的URL,http://www.myWebSiteurladdress.com/Account/[email protected]?MyId=222DF915-264E-4034-BF26-22EB1165667C我得到以下错误。任何想法我可能在这里做错了吗?

参数字典包含参数 'MYID' 非空类型的 '的System.Guid' 的方法 “System.Web.Mvc.ActionResult MyActionMethod(System.String, 的System.Guid空条目)'在'SmartChartsMVC.Controllers.AccountController'中。一个 可选参数必须是一个引用类型,一个可为空的类型,或者是作为可选参数声明的 。参数名称:参数

回答

1

您可以在格式正确的url中使用单个问号。它将路径部分与查询字符串分开。因此,您尝试导航到的网址无效。

一个更为现实的网址可能是以下几点:

http://www.myWebSiteurladdress.com/Account/MyActionMethod/[email protected]/222DF915-264E-4034-BF26-22EB1165667C 

另外,还要确保你的路线名称标记你的动作参数相匹配。在你的Global.asax路由定义中,你使用了{mail},而在你的action参数中,你使用email作为参数的名字。确保你的命名约定一致。

如果你只是想有一个这样的网址:

http://www.myWebSiteurladdress.com/Account/[email protected]&MyId=222DF915-264E-4034-BF26-22EB1165667C 

,那么你不需要添加任何定制路由默认路由将足以拨打以下行动:

public class AccountController : Controller 
{ 
    public ActionResult MyActionMethod(string myEmail, Guid myId) 
    { 
     ... 
    } 

    ... 
} 
+0

像往常一样,你是男人:) – 2012-01-09 20:45:26