我目前正在使用Scott Hanselmans HTTP上下文模拟进行单元测试.这适用于MVC 3并且从不回头,我用它来测试以下代码的调用.
public class PartialViewRenderer : IPartialViewRenderer
{
public string Render(Controller controller, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View,
controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我第一次将我的应用程序转换为MVC 4时遇到了问题,它正在获得运行时异常.所以我试着通过并修复需要修复的东西,这让我在Hanselmans MockHelpers上改变了以下方法:(我基本上改变了HttpContext.Items以返回,因为它引发了"null"的异常)
public static HttpContextBase FakeHttpContext()
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>(); …Run Code Online (Sandbox Code Playgroud) 背景故事:
我在IIS 6 Web服务器上有一个.NET 3.5门户网站.目前,有一个页面被赋予一个值,并根据该值在Web服务上查找PDF文件,并在网页的另一个选项卡中将结果显示给用户.这是通过以下代码完成的.
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Clear();
context.Response.AddHeader("Accept-Header", pdfStream.Length.ToString());
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(pdfStream.ToArray());
context.Response.Flush();
Run Code Online (Sandbox Code Playgroud)
这工作并且已经工作了多年.但是,我们从客户端遇到一个问题,即特定客户每次都将PDF作为相同的PDF返回,直到他们清除临时互联网缓存.
我觉得很酷,这很容易.我只是将缓存标头添加到响应中,从不缓存它.所以我添加了以下内容:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);//IE set to not cache
context.Response.Cache.SetNoStore();//Firefox/Chrome not to cache
context.Response.Cache.SetExpires(DateTime.UtcNow); //for safe measure expire it immediately
Run Code Online (Sandbox Code Playgroud)
经过快速测试后,我得到了我在响应标题中所期待的内容.
Cache-Control no-cache, no-store
Pragma no-cache
Expires -1
Run Code Online (Sandbox Code Playgroud)
问题:
所以这就开始了.一天看起来很酷.第二天,bam,每个人都开始获得白色屏幕并且没有显示PDF.经过进一步调查,我发现它只是IE 6,7,8.Chrome很好,Firefox很好,Safari很好,甚至IE 9也不错.在不知道发生这种情况的原因的情况下,我恢复了我的改变并进行了部署,一切都恢复了.
我一直在搜索,试图找出为什么我的缓存标题似乎混淆IE 6-8无济于事.IE 6-8有没有遇到过这类问题?有什么我想念的吗?感谢您的任何见解.
我正在评估SignalR(恰好与Knockoutjs一起使用),看看我们是否可以使用它来通知客户端并发问题.基本上用户"a"保存记录并且通知用户"b,c,d,e,f,g".我基本上有一个工作的例子,通知所有客户.所以我想我差不多了.
我遇到了这个链接,它引导我走上我现在所处的道路.我一直在看Github上的文档.
基本上我想从Clients.method()通话中排除单个客户端.我没有看到循环客户端并检查ClientId的方法.我能看到的唯一一个可以实现这一目的的可能是看看使用这些组来跟踪它,但这看起来有点麻烦,但我也遇到了问题.
public class TicketHub : Hub
{
static int TotalTickets = 10;
public void GetTicketCount()
{
AddToGroup("ticketClients");
Clients.setTicketCount(TotalTickets);
}
public void BuyTicket()
{
if (TotalTickets > 0)
TotalTickets -= 1;
RemoveFromGroup("ticketClients");
// This will call the method ONLY on the calling client
// Caller.updateTicketCountWithNotification(TotalTickets);
// This will call the method on ALL clients in the group
Clients["ticketClients"].updateTicketCountNotify(TotalTickets);
AddToGroup("ticketClients");
Caller.updateTicketCountDontNotify(TotalTickets);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将所有字符替换为他们的莫尔斯代码等价物.我使用了textBlock.Text.Replace()方法来实现这一点,它工作正常,直到我到达句点字符.当我尝试用".-.- .-"替换它时,它工作正常但是所有其他角色现在都搞砸了.在人物角色之前,一切都很好.
这是代码
namespace PivotApp1
{
public partial class Textmorse : PhoneApplicationPage
{
public string[] aakkoset = { "A", "B", "C", "D", "E",
"F", "G", "H", "I", "J",
"K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T",
"U", "V","W", "X", "Y",
"Z", "Ä", "Ö", "0", "1",
"2", "3", "4", "5", "6",
"7", "8", "9", "?", ":",
",", "@", "/", "=", " ",
"."};
public string[] morse = { ".- ", "-... ", "-.-. ", "-.. ", ". ",
"..-. …Run Code Online (Sandbox Code Playgroud)