3

Linqpad またはコンソール アプリケーションのみを使用して、mvc アプリケーションの一部のアクションから ActionResult を開始して取得するにはどうすればよいですか?

私は MvcApplication クラスのインスタンスを作成できることを知っています:

var mvcApplication = new Web.MvcApplication();

次にコントローラーを作成します。

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

コントローラのアクションを実行する

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/

4

1 に答える 1

2

これは古い質問であり、他の場所で回答される可能性があることは知っていますが、私が取り組んでいるプロジェクトでは、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 には特定の設定があるため、これがすべての人に役立つとは限りませんが、うまくいけば、これが他の人の助けになることを願っています。

于 2016-07-26T15:14:36.947 に答える