gpt4 book ai didi

c# - 从 linqpad 或控制台应用程序运行 asp.net mvc 应用程序

转载 作者:行者123 更新时间:2023-11-30 17:06:18 25 4
gpt4 key购买 nike

如何仅使用 Linqpad 或控制台应用程序启动并从我的 mvc 应用程序的某些操作中获取 ActionResult?

我知道我可以创建 MvcApplication 类实例:

var mvcApplication = new Web.MvcApplication();

然后创建 Controller :

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

甚至运行 Controller 的 Action

homeController.Index()

但它什么也没返回。 mvc 应用程序的生命周期是什么?我应该调用哪些方法来模拟来自用户的网络请求?

编辑


这里有一些关于 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 调试 Controller 操作并获取返回值。

简单地说,您需要告诉 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 的特定设置,因此这可能不适用于所有人,但希望这能帮助其他人。

关于c# - 从 linqpad 或控制台应用程序运行 asp.net mvc 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com