标签: controllercontext

什么是背景?

我开始在任何地方看到上下文.在ASP.NET MVC中,有ControllerContexts,RequestContexts,HttpContexts,FormContexts.在Entity Framework中,您有ObjectContexts和DbContexts.Ninject有Ninject.Activation.IContext.

什么是背景?

asp.net-mvc httpcontext controllercontext objectcontext dbcontext

22
推荐指数
1
解决办法
1047
查看次数

来自ControllerContext的ActionDescriptor

鉴于我只能访问ControllerContext而不是Action____Contexts获取当前正在执行的ActionDescriptor的最佳方式是什么?

到目前为止,我发现的唯一方法是:

new ReflectedControllerDescriptor(context.Controller.GetType())
    .FindAction(context, context.RouteData.GetRequiredString("action"));
Run Code Online (Sandbox Code Playgroud)

这是最佳方法吗?

这个类被命名的事实ReflectedControllerDescriptor让我想知道这个操作是否会付出沉重的代价,因为它会在每个页面请求上执行?与此相关的是此类内部缓存还是我应该实际缓存ReflectedControllerDescriptors

c# controller controllercontext asp.net-mvc-3

14
推荐指数
1
解决办法
2865
查看次数

如何在没有模拟使用UpdateModel的情况下单元测试操作?

我一直在研究Scott Guthrie关于ASP.NET MVC Beta 1的优秀帖子.在其中,他展示了对UpdateModel方法所做的改进以及它们如何改进单元测试.我已经重新创建了一个类似的项目,但是当我运行包含对UpdateModel的调用的UnitTest时,我会收到一个名为controllerContext参数的ArgumentNullException.

这是相关的位,从我的模型开始:

public class Country {
  public Int32 ID { get; set; }
  public String Name { get; set; }
  public String Iso3166 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器动作:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Int32 id, FormCollection form)
{
  using ( ModelBindingDataContext db = new ModelBindingDataContext() ) {
    Country country = db.Countries.Where(c => c.CountryID == id).SingleOrDefault();

    try {
      UpdateModel(country, form);

      db.SubmitChanges();

      return RedirectToAction("Index");
    }
    catch {
      return View(country);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

最后我的单元测试失败了:

[TestMethod]
public void Edit() …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc updatemodel argumentnullexception controllercontext

8
推荐指数
1
解决办法
4530
查看次数

使用View.Render方法将MVC视图转换为字符串的单元测试方法

我编写了将MVC视图转换为字符串和测试方法的方法,以检查它是否返回字符串.

当然它适用于Web,但是当我在NUnit中运行测试时,当方法试图调用View.Render时,它会在System.Web中抛出NullReferenceException.

这是StackTrace:

   w System.Web.VirtualPath.GetCacheKey()
   w System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath(VirtualPath virtualPath, Boolean& keyFromVPP)
   w System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate)
   w System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   w System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   w System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
   w System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound)
   w System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath)
   w System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath)
   w System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromSpecificName(ControllerContext controllerContext, String name, String cacheKey, String[]& searchedLocations)
   w System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc nunit unit-testing controllercontext

6
推荐指数
1
解决办法
1165
查看次数

如何使用rhino mocks在MVC RC1中存根HttpSessionState?

我正在尝试利用asp.net mvc rc1中最近的ControllerContext重构.我应该能够简单地存根会话,但在运行以下代码时,我在第2行继续获得System.NullReferenceException:

var mockContext = MockRepository.GenerateStub<ControllerContext>();
mockContext.Stub(x => x.HttpContext.Session["MyKey"]).Return("MyValue");
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:我刚刚确认我有这个帖子的最新版本的rhino.

asp.net-mvc unit-testing rhino-mocks controllercontext

4
推荐指数
1
解决办法
2198
查看次数

在 AuthorizeAttribute Mvc Core Web Api 中获取控制器实例

我使用下面的类来控制我的 api 方法请求并设置 BaseController 类的一些属性以在方法中常用。这是来自 Asp.Net Mvc Web Api

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class AuthUserAttribute : AuthorizeAttribute
{

    private string Action { get; set; }

    public AuthUserAttribute(string action)
    {
        this.Action = action;
    }

    public override void OnAuthorization(HttpActionContext actionContext)
    {
        BaseController baseController = httpContext.ControllerContext.Controller as BaseController;
        baseController.someCommenProperty = someValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在 Asp.Net Mvc Core Api 中实现相同的结构时,我无法到达初始化的控制器实例。有什么办法可以得到那个实例。

使用 Microsoft.AspNetCore.Authorization;

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Primitives;
using …
Run Code Online (Sandbox Code Playgroud)

c# controllercontext asp.net-core-mvc asp.net-core

3
推荐指数
1
解决办法
2776
查看次数

测试帐户/登录操作

我正在使用Visual Studio 2010的内置测试工具和本文中的类库来测试Account/Loggon操作,以创建虚假的控制器上下文.当我运行测试方法时,这段代码行:

  FormsAuthentication.SetAuthCookie(username, false);    
Run Code Online (Sandbox Code Playgroud)

抛出异常:对象引用未设置为对象的实例

为了测试loggon动作,我想我应该创建一个带有伪控制器上下文的控制器,它具有cookie集合.这是我的测试代码块:

   AccountController controller = new AccountController();
   var cookies = new HttpCookieCollection();

   controller.ControllerContext = new FakeControllerContext(controller, cookies);

   ActionResult result = controller.RemoteLogOn(username, password);
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc unit-testing controllercontext formsauthentication

0
推荐指数
1
解决办法
2518
查看次数