C# 使用相同的方法下载不同的文件

C# 使用相同的方法下载不同的文件,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我目前正在开发一个web应用程序,我正在使用C#和Asp.NETMVC。在其中一个页面上,我要求用户能够下载文件并填写相关数据,然后上传。由于一些用户使用旧机器,我正在使用.xls和.xlsx。可下载的文件取决于用户必须选择的下拉值 我有两个按钮,一个用于.xls,另一个用于xlsx文件。我的问题是如何使用相同的后端代码在文件之间交换。因此,如果单击了.xls,则用户将获得.xls文件,如果单击了另一个,则用户将收到.xlsx文件 这是我目前的代码: public FileResult Down

我目前正在开发一个web应用程序,我正在使用C#和Asp.NETMVC。在其中一个页面上,我要求用户能够下载文件并填写相关数据,然后上传。由于一些用户使用旧机器,我正在使用
.xls
.xlsx
。可下载的文件取决于用户必须选择的下拉值

我有两个按钮,一个用于
.xls
,另一个用于
xlsx
文件。我的问题是如何使用相同的后端代码在文件之间交换。因此,如果单击了
.xls
,则用户将获得
.xls
文件,如果单击了另一个,则用户将收到
.xlsx
文件

这是我目前的代码:

public FileResult DownloadTemplates(string policyType)
{
   string templateName = string.Empty;
   string baseDirectory = "base path";
   string templateDirectory = "temnplate directory path";

    switch (policyType)
    {
       case "Administrative":
          templateName = "Admin Xls File"; //How can I swap between the .xls and .xlsx file?
          break;
       case "Policy":
          templateName = "Policy Xls File"; //How can I swap between the .xls and .xlsx file?
          break;
       case "Consignment":
          templateName = "Consignment Xls File"; //How can I swap between the .xls and .xlsx file?
          break;
       case "Quality":
          templateName = "Quality Xls file"; //How can I swap between the .xls and .xlsx file?
          break;
       default:
          templateName = string.Empty;
          break;
    }

    string filePath = Path.Combine(baseDirectory, templateDirectory, templateName);
    byte[] fileData = System.IO.File.ReadAllBytes(filePath);
    string contentType = MimeMapping.GetMimeMapping(filePath);

    return File(fileData, contentType);
}

有一个
路径
方法-可以为您更改扩展名:

如果路径没有扩展名,并且扩展名不为null,则返回的路径字符串包含附加到路径末尾的扩展名

如果您存储的文件名中有一个扩展名已经存在(例如xlsx),那么这也会起作用,那么您需要做的就是:

if (xlsSelected)
    Path.ChangeExtension(filePath, ".xlsx");
显然,您需要传入(或以其他方式确定)
xlsSelected

或者,如果只存储模板名称而不存储扩展名,则可以执行以下操作:

if (xlsSelected)
    templateName = templateName + ".xls";
else
    templateName = templateName + ".xlsx";

如果将来需要再次更改扩展字符串资源和/或可配置扩展字符串资源,您可以更进一步。

此方法如何知道它是XLS还是XLSX?您似乎没有为此传递参数,并且没有
sender
查看单击了哪个按钮。既然较新版本的Excel会打开此文件,为什么不在这两种情况下都提供XLS呢。为什么两者都需要?再次感谢,我使用了条件运算符
(?:)
并将我的switch语句更改为
templateName=fileSelected.Equals(“xls”)?“AdminXls”:“AdminXlsx”