2013-03-18 162 views
3

如何從我的mvc應用程序的某些操作啓動並獲取ActionResult僅使用Linqpad或控制檯應用程序?從linqpad或控制檯應用程序運行asp.net mvc應用程序

我知道我可以創建MvcApplication類instanse:

var mvcApplication = new Web.MvcApplication(); 

然後創建控制器:

var homeController = new Web.Controllers.HomeController(); 

即使運行控制器的動作

homeController.Index() 

但它沒有返回。什麼是mvc應用程序的生命週期?我應該調用哪些方法模擬用戶的Web請求?

編輯


這裏關於ASP.NET MVC生命週期的一些好職位,但unfortunally我解決不了我的問題還沒有

http://stephenwalther.com/archive/2008/03/18/asp-net-mvc-in-depth-the-life-of-an-asp-net-mvc-request.aspx

http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/

+0

我可以問一下這樣一個專長的目標是什麼嗎? – 2013-03-18 14:03:19

+0

@Kenneth K主要目的是使測試和錯誤修復更容易。當然,我可以使用單元測試,但他們並沒有像Linqpad中的轉儲那樣強大的輸出方法。 – Neir0 2013-03-18 14:06:51

+0

@Kenneth K另一個原因是更好地理解asp.net mvc應用程序的實際工作方式。當你試圖用自己的手做時,閱讀任何文章都會好得多。 – Neir0 2013-03-18 14:13:11

回答

2

我知道這是一個老問題,並可能在別處得到解答,但在我正在開發的一個項目中,我們可以使用Linqpad調試Controller Actions d得到返回的值。

簡單地說,你需要告訴Linqpad返回的東西:

var result = homeController.Index(); 
result.Dump(); 

您可能還需要模擬你的背景和附加視覺工作室的調試器。

完整的代碼片段:

void Main() 
{  
    using(var svc = new CrmOrganizationServiceContext(new CrmConnection("Xrm"))) 
    { 
     DummyIdentity User = new DummyIdentity(); 

     using (var context = new XrmDataContext(svc)) 
     { 
      // Attach the Visual Studio debugger 
      System.Diagnostics.Debugger.Launch(); 
      // Instantiate the Controller to be tested 
      var controller = new HomeController(svc); 
      // Instantiate the Context, this is needed for IPrincipal User 
      var controllerContext = new ControllerContext(); 

      controllerContext.HttpContext = new DummyHttpContext(); 
      controller.ControllerContext = controllerContext; 

      // Test the action 
      var result = controller.Index(); 
      result.Dump(); 
     } 
    }    
} 

// Below is the Mocking classes used to sub in Context, User, etc. 
public class DummyHttpContext:HttpContextBase { 
    public override IPrincipal User {get {return new DummyPrincipal();}} 
} 

public class DummyPrincipal : IPrincipal 
{ 
    public bool IsInRole(string role) {return role == "User";} 
    public IIdentity Identity {get {return new DummyIdentity();}} 
} 

public class DummyIdentity : IIdentity 
{ 
    public string AuthenticationType { get {return "?";} } 
    public bool IsAuthenticated { get {return true;}} 
    public string Name { get {return "[email protected]";} } 
} 

你應該得到提示選擇一個調試器,與您的應用程序選擇內置的Visual Studio的實例。

我們針對MVC-CRM進行了具體設置,因此這可能不適用於所有人,但希望這可以幫助其他人。

相關問題