从linqpad或控制台应用程序运行asp.net mvc应用程序
本文关键字:应用程序 asp net mvc 运行 控制台 linqpad | 更新日期: 2023-09-27 18:04:41
我怎么能开始并获得ActionResult从我的mvc应用程序的一些动作只使用Linqpad或控制台应用程序?
我知道我可以创建mvapplication类实例:
var mvcApplication = new Web.MvcApplication();
then create controller:
var homeController = new Web.Controllers.HomeController();
even run controller的action
homeController.Index()
但是它什么也不返回。什么是mvc应用程序的生命周期?我应该调用哪些方法来模拟用户的web请求?
编辑这里有一些关于ASP的好文章。. NET MVC生命周期,但不幸的是,我还不能解决我的问题
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/我知道这是一个老问题,可能会在其他地方回答,但在一个项目中,我正在工作,我们可以调试控制器动作与Linqpad和获得返回值。
简单地说,你需要告诉Linqpad返回一些东西:
var result = homeController.Index();
result.Dump();
您可能还需要模拟您的上下文并附加visual studio作为调试器。
完整代码片段:
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 "sampleuser@email.com";} }
}
你应该被提示选择一个调试器,选择与你的应用程序构建的Visual Studio实例。
我们对MVC-CRM有一个特定的设置,所以这可能不适用于每个人,但希望这将帮助其他人。