首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ASP.NET MVC抓取动态生成的图片-涉及权限有关问题

2013-09-06 
ASP.NET MVC抓取动态生成的图片---涉及权限问题本帖最后由 idonotknowwhatislife 于 2013-08-13 16:51:48

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"/>
 
        2. Action GetResultByYear 根据传入的参数,得到相关的一组数值后,生成图片

        [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/*");
        }

    “动态生成图片”(GetResultByYear)是需要验证用户登录状态的,未登录的话,会跳转到登录页面。
    在另外一个公告管理模块里,需要抓取这些图片,然后插入到公告内容中,开始我是直接取的图片的src添加到公告内容中,也就是
<img src="/Analysis/SingleAnalysis/GetResultByYear?ID=3&year=2012&guid=DEBF000F-4C18-64E7-9B05-796B3300D2C7"/>

    但是这样有个问题:在信息查看模块中,是不需要登录的,而不登录的情况下,查看包含上面这类图片的时候,图片加载会失败。
    统计分析 这个模块是另外一个部门已经开发完成的,那么,在不修改统计分析模块代码的情况下,怎么解决这个问题呢?
    开始我想到了一个方法:在公告管理模块对应的Action里,建一个WebClient,然后把图片保存到服务器,再根据文件路径生成图片的url,但实际运行的时候,发现下载的只是登陆页面……

            System.Net.WebClient client = new System.Net.WebClient();
            client.DownloadFile(imgUrl, filePath);

如何使WebClient继承当前用户的登录状态呢?

或者,用其它方式来解决这个问题? ASP.NET?MVC 图片 权限


[解决办法]
既然设置必须登录才能看到图片了,不登陆当然就不应该看到。。。。设置的有问题

WebClient需要把cookie或者urlid等保存用户状态的东东传过去才能有用户状态,这个要看你的用户登录机制是怎么实现的。
[解决办法]
在编辑中调用WebService将图片保存到服务器就行了
[解决办法]
你可以另外做一个action,直接调用生成图片的方法:
return new YourController().GetResultByYear(...)
然后把img.src指向你的action

[解决办法]
一,继续按照楼主你的思路往下走,  你前台查看目前实际上是直接调用的生成图片的方法的那个页面实时生成(这和验证码是一个道理)
而你生成图片的方法的地方需要验证登录,而前台查看是不需要登录的,这样显然是冲突的,如果继续此思路,只能是后台登录查看此页面,把生成的图片保存到一个指定的文件夹,然后前台查看时直接用已经存在的图片文件(但是这样就不是实时的图片结果了,需要后台人员手动去生成图片)


二,换个思路,在验证的地方改动, 生成图片的这个方法页面加载时你肯定是判断的登录状态,那么在登录状态直接加一个判断来源url, 



string url= Request.UrlReferrer.ToString();
if(url=="你前台要浏览的那个url")
     return true;


这样就能保证只有前台指定的那个页面和后台登录之后可以正常看到结果

热点排行