2012-02-01 104 views
2

我們剛開始使用ASP.NET MVC3,我們想單元測試我們的控制器。測試ASP.NET MVC控制器Httpget

這裏是我的控制器功能:

[HttpGet] 
Public ActionResult Action() 
{ 
    Guid Id = Guid.Empty; 
      string[] UrlSegments = Request.Url.Segments; 
      Guid.TryParse(UrlSegments[UrlSegments.Count() - 1], out Id); 
      if(Id == Guid.Empty) 
       return RedirectToAction("ErrorPage"); 
    } 

我要測試的這款控制器function.I已經把匹配的路由,以配合我的Global.asax文件這一功能。基本上我試圖從URl中檢索GUID,如果它不好,就把他帶到錯誤頁面。 HttpRequestBase類URl沒有setter,所以我很困惑如何測試這個功能?

+0

我改變了「如果(編號== Guid.Empty)」,以「如果(activationId == Guid.Empty)「,希望是可以比較的意思。 – MrBoJangles 2012-02-01 17:09:47

+0

謝謝...我清理了id的東西 – alice7 2012-02-01 17:13:20

+0

什麼不工作,怎麼樣?我會用UrlSegments.Length替換UrlSegments.Count()... – 2012-02-01 17:20:09

回答

0

至於測試,請閱讀comments above中提供的鏈接,但我建議您在MVC Routinghere上進行一些閱讀,它完全符合您的要求。

有你global.ascx.cs看看文件,你會發現這樣的事情:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

這是開箱路線的MVC框架。

路線將根據您給他們的慣例匹配一個網址。

因此,基於上述的默認路由,並獲得一個網址是這樣的:

http://localhost:portnumber/MyController/MyAction/8B4B93DE-76CA-4552-B4AA-460400761EAD 

它會嘗試與該URL匹配到一個名爲與myController的名爲MyAction動作控制器,接收和ID。如果所有標準匹配,它只會觸發此操作。

如果URL中沒有id,並且action方法中定義的id不是可爲空的類型,那麼它將不會執行。相反,它嘗試匹配另一個URL,如果找不到的話,會給出一個404

像這樣:

public class MyController : Controller { 

    [HttpGet] 
    Public ActionResult MyAction(Guid id) 
    { 

    } 
}