假设您有一个只能由该个人资料的所有者访问的个人资料页面。此个人资料页面位于:

用户/资料/ {用户ID}

现在,我想,为了防止其他用户访问此页面,您可以构建UserController类的Profile函数来检查当前会话的标识:

HttpContext.Current.User.Identity.Name

如果id与url中的id匹配,则继续。否则,您将重定向到某种错误页面。

我的问题是你如何对这样的事情进行单元测试?我猜你需要使用某种依赖注入而不是控制器中的HttpContext来进行检查,但我不清楚最好的方法是什么。任何建议都会有所帮助。

有帮助吗?

解决方案 2

我最终选择了“UserNameFilter”。显示在Kazi Manzur的博客文章。像魅力和易于单元测试一样工作。

其他提示

上面的链接很好。我还要添加,而不是以编程方式检查User.Identity.Name值,您应该使用文章中概述的Authorize属性:

http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx

您可以通过对控制器上下文使用假冒来实现。看看这篇文章: http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

这是使用虚假的HttpContext进行模拟的地方。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top