ASP.NET MVC抓取动态生成的图片---涉及权限问题
本帖最后由 idonotknowwhatislife 于 2013-08-13 16:51:48 编辑 在做一个ASP.NET MVC项目里,有多个模块,由多个部门合作开发,
现在遇到的问题涉及到3个模块:统计分析、公告管理、信息查看,其中统计分析、公告管理需要用户登录,未登录则跳转到登陆页,而信息查看不需要用户登录。
统计分析中,有些页面有一些统计图表,是用MvcChart动态生成的图片,实现是:
1. 页面上的图片类似这样:
<img src="/Analysis/SingleAnalysis/GetResultByYear?ID=3&year=2012&guid=DEBF000F-4C18-64E7-9B05-796B3300D2C7"/>
[NeedSignIn]
public ActionResult GetResultByYear(int ID= 0, int year = 0)
{
string XTitle = "时间(单位:月份)";
string YTitle = ControllerHelp.GetYTitle(int.Parse(nodeType));
var values = busiSvc.GetResultByYear(ID, year);
return File(MvcChart.DrawSeries(values, "", XTitle, YTitle, SeriesChartType.Column, true), "image/*");
}
<img src="/Analysis/SingleAnalysis/GetResultByYear?ID=3&year=2012&guid=DEBF000F-4C18-64E7-9B05-796B3300D2C7"/>
System.Net.WebClient client = new System.Net.WebClient();
client.DownloadFile(imgUrl, filePath);
[解决办法]
既然设置必须登录才能看到图片了,不登陆当然就不应该看到。。。。设置的有问题
WebClient需要把cookie或者urlid等保存用户状态的东东传过去才能有用户状态,这个要看你的用户登录机制是怎么实现的。
[解决办法]
在编辑中调用WebService将图片保存到服务器就行了
[解决办法]
你可以另外做一个action,直接调用生成图片的方法:
return new YourController().GetResultByYear(...)
然后把img.src指向你的action
[解决办法]
一,继续按照楼主你的思路往下走, 你前台查看目前实际上是直接调用的生成图片的方法的那个页面实时生成(这和验证码是一个道理)
而你生成图片的方法的地方需要验证登录,而前台查看是不需要登录的,这样显然是冲突的,如果继续此思路,只能是后台登录查看此页面,把生成的图片保存到一个指定的文件夹,然后前台查看时直接用已经存在的图片文件(但是这样就不是实时的图片结果了,需要后台人员手动去生成图片)
二,换个思路,在验证的地方改动, 生成图片的这个方法页面加载时你肯定是判断的登录状态,那么在登录状态直接加一个判断来源url,
string url= Request.UrlReferrer.ToString();
if(url=="你前台要浏览的那个url")
return true;