2012-01-09 119 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