asp.net如何控制用户直接输入URL访问资源

比如如果用户在地址栏输入:mysite/123.pdf如果当前用户已经有了合法Session,则他可以浏览或下载但当当前Session为空时,则要显示禁止访问,请问如何控... 比如如果用户在地址栏输入:mysite/123.pdf
如果当前用户已经有了合法Session,则他可以浏览或下载
但当当前Session为空时,则要显示禁止访问,请问如何控制,是在web.config里面设置吗?因为用户输入的不是网页,所以根本不能在aspx网页文件处理,请指教,谢谢。
展开
 我来答
Jarhf
推荐于2016-06-24 · TA获得超过1862个赞
知道小有建树答主
回答量:1736
采纳率:25%
帮助的人:1032万
展开全部

在<system.web>节中配置

 <httpHandlers>

    <add verb="*" path="*.pdf" type="Common.Handler.MyFileRestrictHandler" />

<httpHandlers>

IIS 7.0以上请在 <system.webServer>节中配置<handlers>中间内容同上</handlers>

项目中添加下面这个类

namespace Common.Hanlder
{
    public class MyFileRestrictHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {
        public bool IsReusable { get { return true; } }
        public void ProcessRequest(HttpContext context)
        {
            if(context.Request.Session["用户"] == null)
            {
                context.Response.Write("非法的请求,请登录后下载");
                context.Response.End();
            }
        }
    }
}
更多追问追答
追问
按照大虾的方法做了一下,但出现了以下错误:
错误 57 “System.Web.HttpRequest”不包含“Session”的定义,并且找不到可接受类型为“System.Web.HttpRequest”的第一个参数的扩展方法“Session”(是否缺少 using 指令或程序集引用?)
追答
由于凭记忆手打的,打错了, 应该是 context.Session,多打了一个 Request。
另外 命名空间打错了 应该是 Common.Handler

不过,你自己调试一下就不会改了啊。。。

用了这个以后,所有的对.pdf后缀的文件访问 都会先走这个 Handler处理, 这里你可以写你要的处理逻辑。 如果想添加其他后缀名,改 path="*.pdf, *.doc"
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
润晨雨
2013-05-14 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:114万
展开全部
可以设置response头信息,来实现下载。
至于判断权限,可以在page_load中判断。

//实现下载的函数
private void FileDownload(string fName)
{
System.IO.FileInfo file = new System.IO.FileInfo(fName);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);

Response.End();
Response.Flush();
Response.Clear();
}

//page_load中加入
if(Session["id"]!=null)
{
FileDownload(Server.MapPath("img/1.jpg")); //需要下载的文件
}
追问
由于用户可能直接输入资源地址,page_load 是不会被执行的。
追答
在web.config中加入:

这样的话就可以防止直接打开了。不过这种方法很鸡肋啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦里寻你我他
2013-05-14 · TA获得超过2199个赞
知道大有可为答主
回答量:2171
采纳率:42%
帮助的人:1210万
展开全部
pdf的文件名放在数据库中,采用动态页面访问下载地址,在动态页面中设置判断语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式