问题背景
在我的ASP.net MVC4 web应用程序中,我们允许用户在Excel工作簿中下载数据,其中一个单元格包含指向报表页的超链接。我们准备链接,以便当用户单击Excel中的链接时,使用参数调用ReportController,处理请求并返回报表摘要视图,即.cshtml页面。一切正常..。
我使用SpreadSheetGear生成excel,生成链接的代码片段:
rrid = (int.TryParse((string) values[row][column], out outInt) ? outInt : 0);
worksheet.Hyperlinks.Add(worksheet.Cells[row + 1, column],
PrepareProspectProfileLink((int) rrid, downloadCode),
string.Empty,
"CTRL + click to follow link",
rrid.ToString(CultureInfo.InvariantCulture));问题
我只是注意到,当我单击excel中的链接时,相同的请求会被发送到web服务器两次。
分析
我使用Fiddler进行了检查,并在应用程序代码中放置了一个断点,并确认请求确实发送了两次。
在fiddler中,在Process列中,我发现第一个请求来自"excel:24408“,第二个请求来自"chrome:4028”。
另外,如果我在Outlook中复制粘贴链接,它只调用一次请求。
据我所知,第一个请求是由excel调用的,当excel与html一起服务时,它不知道如何呈现它,因此将请求移交给默认的web浏览器,即我的系统上的Chrome。现在Chrome会发出相同的请求,并且在接收到html时,它会打开html页面。
问题
我怎么才能阻止这种行为?它给web服务器带来不必要的负载。其次,当我审核用户操作时,我得到两个条目:(
发布于 2014-07-28 11:15:02
我不确定excel,但您可以在web服务器上处理这种奇怪的行为。您可以创建html页面(无需审核),该页面将使用javascript将用户重定向到具有真实报表(以及审计内容)的页面。
如果您只关心审计,您可以在缓存(或db)中跟踪对报表的请求,并且只有在5秒钟前没有触发相同的报表请求时才考虑进行审计条目。
https://stackoverflow.com/questions/24993813
复制相似问题