You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Razor网站自定义扩展名文件下载404错误解决方案咨询

解决ASP.NET中自定义扩展名文件下载404的问题

老兄,这个问题我碰过好多次了——IIS默认对陌生的文件扩展名会直接返回404,因为它不知道该怎么处理这类文件。别担心,有几个简单的办法能解决:

方法1:在Web.config中添加MIME类型(推荐)

这是最直接的方案,告诉IIS如何识别你的.modbus扩展名。在项目的Web.config文件里,找到<system.webServer>节点,添加<staticContent>配置:

<system.webServer>
  <staticContent>
    <!-- 为.modbus扩展名注册MIME类型,通用二进制类型适配所有下载场景 -->
    <mimeMap fileExtension=".modbus" mimeType="application/octet-stream" />
  </staticContent>
</system.webServer>
  • application/octet-stream是通用的二进制文件MIME类型,浏览器识别后会直接触发下载行为,不会尝试打开文件。
  • 配置完成后,你原来的cshtml链接不需要修改,直接就能正常下载.modbus文件了。

方法2:通过处理程序/Controller Action输出文件(适合需要额外逻辑的场景)

如果你的下载需要权限验证、日志记录或者其他自定义逻辑,可以用这个方案:

方案A:使用ASHX一般处理程序

  1. 在项目中新建一个DownloadModbusFile.ashx文件,代码如下:
public class DownloadModbusFile : IHttpHandler 
{
    public void ProcessRequest(HttpContext context)
    {
        // 映射服务器物理路径
        string filePath = context.Server.MapPath("~/uploads/UNITS/docs/VFD/RT350Z_cfg.modbus");
        
        if (System.IO.File.Exists(filePath))
        {
            // 设置响应类型
            context.Response.ContentType = "application/octet-stream";
            // 指定下载文件名
            context.Response.AddHeader("Content-Disposition", $"attachment; filename=\"RT350Z_cfg.modbus\"");
            // 传输文件到客户端
            context.Response.TransmitFile(filePath);
            context.Response.End();
        }
        else
        {
            context.Response.StatusCode = 404;
        }
    }

    public bool IsReusable => false;
}
  1. 修改cshtml中的链接:
<a target="_blank" href="@Url.Content("~/DownloadModbusFile.ashx")">Download File</a>

方案B:使用MVC Controller Action

如果你的项目是MVC架构,可以在Controller中添加一个Action:

public ActionResult DownloadModbusConfig()
{
    string filePath = Server.MapPath("~/uploads/UNITS/docs/VFD/RT350Z_cfg.modbus");
    
    if (System.IO.File.Exists(filePath))
    {
        // 返回文件流,指定MIME类型和下载文件名
        return File(filePath, "application/octet-stream", "RT350Z_cfg.modbus");
    }
    
    return HttpNotFound();
}

然后修改cshtml链接:

<a target="_blank" href="@Url.Action("DownloadModbusConfig", "YourControllerName")">Download File</a>

记得把YourControllerName换成你实际的Controller名称。

方法3:直接在IIS管理器中配置MIME类型

如果你有权限操作服务器上的IIS,可以直接通过图形界面配置:

  • 打开IIS管理器,找到你的站点;
  • 双击右侧面板中的「MIME类型」;
  • 点击右上角的「添加」按钮;
  • 在弹出的窗口中,文件扩展名填.modbus,MIME类型填application/octet-stream;
  • 点击「确定」完成配置。

内容的提问来源于stack exchange,提问作者bagofmilk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:38