2011-07-17 25 views
1

我使用ASP.Net MVC 3,我試圖在這樣一個URL傳遞一個電子郵件地址作爲參數:如何接受電子郵件參數在ASP.Net MVC 3

www.myapp.co.uk/customers/changedetails/[email protected]

的傳入時參數值爲空。如果我使用參數,則它可以工作;

www.myapp.co.uk/customers/changedetails/[email protected]

我的控制器看起來是這樣的:

public class CustomerController { 

    [HttpGet] 
    public ViewResult ChangeDetails(string email) 
    { 
     var model = GetModel(email); 
     return View(model); 
    } 
    } 

我的註冊路線是這樣的:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
    } 

我缺少的是能夠使用電子郵件作爲{ id}參數(www.myapp.co.uk/customers/changedetails/[email protected])?:

+0

將您的'string email'參數更改爲'string id',因爲路由使用'{id}'作爲映射參數的名稱 – Buildstarted

回答

1

您需要添加其他路由:

 routes.MapRoute(
      "ChangeEmail", 
      "customers/changedetails/{email}", 
      new { controller = "Customers", action = "ChangeDetails", email = UrlParameter.Optional } 
    ); 

URL參數名稱需要與操作方法參數名稱匹配。

+1

Adam - 這似乎不起作用。給了我一個404。 –

+0

(電子郵件參數值仍然通過爲空)。 –

+0

確保ChangeEmail路由在默認路由之前映射 –

5

沒有電子郵件作爲最後的路線參數。或者如果你這樣做,添加一個尾部斜線。這背後

/my/route/[email protected] -> fail 
/my/route/[email protected]/ -> success 
/my/[email protected]/route -> success 

推理是相當複雜的,但是這裏的這些事情http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

我什麼肯定的是,很多時候,如果你有電子郵件作爲最後沒有斜線,要求好文章甚至不會到達asp.net管道。它看起來像一個文件請求。話雖如此,它* .com擴展看起來確實非常危險。在文件名中使用@當然不會減少它的可疑性。

你可能會得到它的工作。您可能需要放鬆安全措施才能這樣做,但幾乎肯定會在某個時候破壞安全。

所以,最好的選擇是保持它作爲查詢字符串參數。第二個最佳選擇是用斜線追蹤它。

0

您可以嘗試將以下代碼添加到您的web.config中。

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

這是因爲IIS Express認爲「.com」作爲擴展名並尋找相關模塊來處理它。但是,沒有相關的模塊,所以它調用靜態模塊來處理它。然後它將搜索靜態內容文件路徑「/customers/changedetails/[email protected]」,然後報告404未找到錯誤。 在你的web.config中添加上面的代碼會使你的請求包含由MVC模塊而不是StaticFile模塊處理的電子郵件。