GVKun编程网logo

asp.net-mvc – 如何使用rhino mocks在MVC RC1中存根HttpSessionState?(rhinocommon sdk)

12

想了解asp.net-mvc–如何使用rhinomocks在MVCRC1中存根HttpSessionState?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于rhinocommonsdk的

想了解asp.net-mvc – 如何使用rhino mocks在MVC RC1中存根HttpSessionState?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于rhinocommon sdk的相关问题,此外,我们还将为您介绍关于asp.net-core-mvc – 如何在Asp.Net Core MVC 1.0(又名MVC 6 RC1)中访问Session Timeout值?、asp.net-mvc – ASP.NET MVC 1和2在Mono 2.4与Fluent NHibernate、asp.net-mvc – ASP.NET MVC 2中的DataAnnotations – 阻止MVC将RequiredAttribute应用于不可为空的DateTime等属性、asp.net-mvc – ASP.NET MVC 3:如何强制ActionLink执行HttpPost而不是HttpGet?的新知识。

本文目录一览:

asp.net-mvc – 如何使用rhino mocks在MVC RC1中存根HttpSessionState?(rhinocommon sdk)

asp.net-mvc – 如何使用rhino mocks在MVC RC1中存根HttpSessionState?(rhinocommon sdk)

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

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

我究竟做错了什么?

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

解决方法

您还需要模拟HttpContext才能使其正常工作.
我正在使用HttpContext的模拟:

public class HttpContextMock
{
    private readonly HttpContextBase _contextBase;
    private readonly HttpRequestBase _requestBase;
    private readonly HttpResponseBase _responseBase;
    private readonly HttpSessionStateBase _sessionStateBase;
    private readonly HttpServerUtilityBase _serverUtilityBase;

    public HttpContextBase Context { get { return _contextBase; } }
    public HttpRequestBase Request { get { return _requestBase; } }
    public HttpResponseBase Response { get { return _responseBase; } }
    public HttpSessionStateBase Session { get { return _sessionStateBase; } }
    public HttpServerUtilityBase Server { get { return _serverUtilityBase; } }


    public HttpContextMock()
    {
        _contextBase = MockRepository.GenerateStub<HttpContextBase>();
        _requestBase = MockRepository.GenerateStub<HttpRequestBase>();
        _responseBase = MockRepository.GenerateStub<HttpResponseBase>();
        _sessionStateBase = MockRepository.GenerateStub<HttpSessionStateBase>();
        _serverUtilityBase = MockRepository.GenerateStub<HttpServerUtilityBase>();

        _contextBase.Stub(x => x.Request).Return(_requestBase);
        _contextBase.Stub(x => x.Response).Return(_responseBase);
        _contextBase.Stub(x => x.Session).Return(_sessionStateBase);
        _contextBase.Stub(x => x.Server).Return(_serverUtilityBase);

        _requestBase.Stub(x => x.IsAuthenticated).Return(true);

        _contextBase.User = new GenericPrincipal(new GenericIdentity("a@a.a"),new string[] {"Admin"});

    }
}

在测试的SetUp中,我创建了一个控制器的实例:

[SetUp]
    public override void TestSetUp()
    {
        base.TestSetUp();

        repository = MockRepository.GenerateMock<IFooRepository>();
        controller = new FooController()
                         {
                             FooRepository = repository,UserRepository = userMockRepository
                         };

        controller.ControllerContext = new ControllerContext(context.Context,new RouteData(),controller);
    }

一切正常,我可以为会话和许多其他事情添加参数.希望这可以帮助.

asp.net-core-mvc – 如何在Asp.Net Core MVC 1.0(又名MVC 6 RC1)中访问Session Timeout值?

asp.net-core-mvc – 如何在Asp.Net Core MVC 1.0(又名MVC 6 RC1)中访问Session Timeout值?

在Asp.Net Core MVC 1.0(MVC 6 RC1)中,在Startup.cs中的ConfigureServices方法中添加会话支持时指定会话超时期限,如下所示:
services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(30);
            options.CookieName = "Session";
        });

我的问题是:在应用程序的其他地方,如何访问此IdleTimeout值?

我希望从HttpContext.Session对象中找到它作为属性,但它似乎并不存在.我搜索过高低,这似乎没有记录在任何地方.思考?

解决方法

这似乎是 DistributedSession类中的私有字段.所以目前,你无法得到它. Session似乎缺少旧版 HttpSessionState课程中的很多属性,但我找不到任何指向原因的东西(可能有一个好的!).

你可以用反射得到它,但它非常粗糙.以下示例使用this answer.

public IActionResult Index()
{
    var value = GetInstanceField(typeof(distributedSession),HttpContext.Session,"_idleTimeout");
    return View();
}

我建议将值存储在配置文件或某个内部类中.

asp.net-mvc – ASP.NET MVC 1和2在Mono 2.4与Fluent NHibernate

asp.net-mvc – ASP.NET MVC 1和2在Mono 2.4与Fluent NHibernate

我想使用ASP.NET MVC创建一个应用程序,它应该在单声道2.4下运行(编译将在 Windows框上完成).有人有运气吗?这是我已经尝试过的:

> ASP.NET MVC on mono没有任何持久性模型支持,并使用nhaml作为视图引擎
> S#aml架构,这是一个非常好的框架imho,但它取决于太多的东西,这不奏效在单声道(如windsor)

第一部分工作正常,我没有遇到任何重大问题.但是我不能让第二部分工作.似乎它是依赖Castle.Windsor打破了整个单声道支持(但也可能有其他的部分).

因此,我决定创建一个替代框架,借鉴了s#arp架构的一些想法,但是设计为在单声道下工作(如果我能够做到这一点,我将为社区发布它) .控制器和视图部分工作正常(这里没有太多的魔法,他们一直在工作),但是在开始持久性部分之前我有一些问题:

>什么NHibernate版本在单声道下工作?我听说过1.2是正常工作. 2.0.1 / 2.1测试版在单声道下工作吗?
> Fluent.NHibernate和NHibernate.Linq是否在单声道下工作? (对于后者来说,似乎需要一些在单声道中不可取的依赖)
>在单声道下,NHibernate的持久性支持有什么好的选择吗?

其他问题:

>有没有任何具有单声道持久性asp.net mvc支持的框架,还是我想到的第一个?
>如果你已经做到了这一点:你对稳定性/可用性有什么看法?

感谢您的答案

编辑:更新了支持ASP.NET MVC 2:http://shaml.sztupy.hu/的框架

解决方法

我正在使用单声道2.4来运行asp.net mvc应用程序Windows服务.
兼容性非常好有一些错误和差异,而不是Windows,但一旦你了解到它们是什么更容易(开始可能会有痛苦!)

我使用NHibernate(2.1)FluentNhibernate,StructureMap,NBehave,Moq和open id lib,它们都似乎按预期工作.

至于稳定性,由于我已经排除了我的代码中的主要错误,我没有任何问题.

可用性,这是一个完全不同的平台,所以你需要以开放的心态来到它,并准备离开窗口的方式.好消息是,一旦你做的事情变得更容易. Apache比IIS好很多,配置和管理一个linux盒子比Windows容易.

我很高兴我选择单声道..对不起,这开始听起来像一个公关驱动器 – 但我真的很高兴!

asp.net-mvc – ASP.NET MVC 2中的DataAnnotations – 阻止MVC将RequiredAttribute应用于不可为空的DateTime等属性

asp.net-mvc – ASP.NET MVC 2中的DataAnnotations – 阻止MVC将RequiredAttribute应用于不可为空的DateTime等属性

我试图创建一个自定义版本的requiredAttribute来替换内置的,我已经让它适用于具有字符串值的属性,但是具有DateTime或整数的属性,默认的requiredAttribute似乎是自动应用的(如果财产不可为空!)

我的问题是我希望能够使用我的自定义必需验证器指定一个DateTime属性,该验证器从资源文件中获取错误消息(我不想告诉requiredAttribute资源文件的类型和每次我申请它都是关键.这就是为什么我要定制一个.)

如何防止框架将所需属性应用于DateTime和int等类型的属性,而不将它们更改为可为空.

谢谢

解决方法

找到了!我把它放在Global.asax.cs文件中

DataAnnotationsModelValidatorProvider.AddImplicitrequiredAttributeForValueTypes = false;

DataAnnotationsModelValidatorProvider类有一个名为“AddImplicitrequiredAttributeForValueTypes”的静态属性,默认情况下必须为true,并将其设置为false可解决问题.

(对于任何试图做同样事情的人来说,我都记录了这个条目here)

asp.net-mvc – ASP.NET MVC 3:如何强制ActionLink执行HttpPost而不是HttpGet?

asp.net-mvc – ASP.NET MVC 3:如何强制ActionLink执行HttpPost而不是HttpGet?

是否可以强制@ Html.ActionLink()执行POST而不是GET?如果是这样,怎么样?

解决方法

ActionLink帮助器方法将呈现一个锚标记,单击它始终是一个GET请求.如果你想让它成为一个POST请求.你应该使用一点javacsript覆盖默认的behvIoUr
@ActionLink("Delete","Delete","Item",new {@id=4},new { @})

现在一些jQuery代码

<script type="text/javascript">
  $(function(){
    $("a.postLink").click(function(e){
      e.preventDefault();
      $.post($(this).attr("href"),function(data){
          // got the result in data variable. do whatever you want Now
          //may be reload the page
      });
    });    
  });    
</script>

确保您有一个HttpPost类型的Action方法来处理此请求

[HttpPost]
public ActionResult Delete(int id)
{
  // do something awesome here and return something      
}

我们今天的关于asp.net-mvc – 如何使用rhino mocks在MVC RC1中存根HttpSessionState?rhinocommon sdk的分享就到这里,谢谢您的阅读,如果想了解更多关于asp.net-core-mvc – 如何在Asp.Net Core MVC 1.0(又名MVC 6 RC1)中访问Session Timeout值?、asp.net-mvc – ASP.NET MVC 1和2在Mono 2.4与Fluent NHibernate、asp.net-mvc – ASP.NET MVC 2中的DataAnnotations – 阻止MVC将RequiredAttribute应用于不可为空的DateTime等属性、asp.net-mvc – ASP.NET MVC 3:如何强制ActionLink执行HttpPost而不是HttpGet?的相关信息,可以在本站进行搜索。

本文标签: