加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Http Handler正在iis express中工作,而不是在iis服务

发布时间:2020-12-16 06:48:35 所属栏目:asp.Net 来源:网络整理
导读:我将实现HttpHandler,以允许基于会话值从我的站点下载文件.如果会话存在,则允许用户下载文件,否则重定向到索引页面,该页面是站点的登录页面.当我在iis服务器上运行我的网站时,我的代码在iis express中工作正常,处理程序无法运行. 对于IIS express,web.config
我将实现HttpHandler,以允许基于会话值从我的站点下载文件.如果会话存在,则允许用户下载文件,否则重定向到索引页面,该页面是站点的登录页面.当我在iis服务器上运行我的网站时,我的代码在iis express中工作正常,处理程序无法运行.

对于IIS express,web.config文件包含我已添加的以下部分.以下配置适用于iis express.

<system.web>

<httpHandlers>

  <add verb="*" path="*.pdf" type="QDMS.FileHandler" />
Same add tag for all the files to restrict downloading without session.

</httpHandlers>

</system.web>

IIS服务器的配置不起作用如下.

<system.webServer>

<handlers>
  <add name="Files" path="*.pdf,*.doc,*.docx,*.rar,*.zip,*.ppt,*.pptx,*.jpg,*.png,*.bmp,*.gif,*.html,*.htm,*.pps" verb="*" type="QDMS.FileHandler" resourceType="Unspecified" requireAccess="script" />    
</handlers>

</system.webServer>

我的文件处理程序如下

using System;
using System.Web;
using System.Web.SessionState;
using QDMS.Old_App_Code;

namespace QDMS
{
public class FileHandler : IHttpHandler,IReadOnlySessionState
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
if (!CheckWetherTheRequestForFileExistOrNot(context)) return;
if (CheckUsersForFileDownloading(context))
context.Response.Redirect("~/index.aspx");
else
{
var rawURL = context.Request.RawUrl;
var dotIndex = rawURL.LastIndexOf(".",System.StringComparison.Ordinal);
var ext = rawURL.Substring(dotIndex);
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.ContentType = MIMEEType.Get(ext);
context.Response.AddHeader("Content-Disposition","attachment");
context.Response.WriteFile(rawURL);
context.Response.Flush();
}  
}
public bool CheckWetherTheRequestForFileExistOrNot(HttpContext context)
{
string url = context.Request.RawUrl.ToLower().Trim();
if (url.Contains(".pdf") || url.Contains(".xls") || url.Contains(".xlsx") || url.Contains(".jpg") ||
            url.Contains(".bmp") || url.Contains(".rar") || url.Contains(".doc") || url.Contains(".docx") ||
            url.Contains(".png") || url.Contains(".gif") || url.Contains(".pptx") || url.Contains(".zip") ||
            url.Contains(".ppt") || url.Contains(".pps") || url.Contains(".htm") || url.Contains(".html"))
return true;
else
return false;
}
public bool CheckUsersForFileDownloading(HttpContext context)
{
return (context.Session["FrontHiddenID"] == null) && (context.Session["HiddenID"] == null);
}
}
}

我确信在web.config文件中的部分不正确,这就是它无法正常工作的原因.所以我需要建议来纠正web.config文件中的处理程序部分.
任何有关此问题的建议和帮助将受到高度赞赏

解决方法

您的IIS处理程序应如下所示:

<add name="Files" path="*.pdf" verb="*" type="QDMS.FileHandler" resourceType="Unspecified" requireAccess="Script" />

与您的版本有两点不同:

>只有一个文件掩码,您应该为每种文件类型注册一个处理程序
> requireAccess =“脚本”,“脚本”具有大写“S”

希望这会有所帮助

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读