Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# api控制器的文件下载问题_C#_Asp.net Mvc_Angularjs_Asp.net Web Api - Fatal编程技术网

C# api控制器的文件下载问题

C# api控制器的文件下载问题,c#,asp.net-mvc,angularjs,asp.net-web-api,C#,Asp.net Mvc,Angularjs,Asp.net Web Api,我在asp.NETMVC应用程序中下载了上述代码的一个文件。它工作得很好,因为我的控制器是继承给控制器的。但当我将此代码移动到Webapi控制器时,它在返回文件时抛出错误。经过分析,我发现webapi中的控制器继承到ApiController(system.web.http.api控制器)。我发现ApicController中没有文件类。在webapi控制器中是否有实现下载文件功能的选项 我在webapi控制器中尝试了下面的替代代码,但调用此代码后,无法看到下载文件 public class D

我在asp.NETMVC应用程序中下载了上述代码的一个文件。它工作得很好,因为我的控制器是继承给控制器的。但当我将此代码移动到Webapi控制器时,它在返回文件时抛出错误。经过分析,我发现webapi中的控制器继承到ApiController(system.web.http.api控制器)。我发现ApicController中没有文件类。在webapi控制器中是否有实现下载文件功能的选项

我在webapi控制器中尝试了下面的替代代码,但调用此代码后,无法看到下载文件

public class DefaultController : Controller
{
    // GET: Default
    public ActionResult Index()
    {
        return Download();
    }

    public FileResult Download()
    {
        string xmlString = "my test xml data";
        string fileName = "test" + ".xml";
        return File(Encoding.UTF8.GetBytes(xmlString), "application/xml", fileName);
    }
}

PS:我试图使用angularjs代码通过angular服务调用这个api。这是在下载按钮点击时调用的。api控制器代码中的任何示例代码或帮助或建议都会有所帮助。

考虑到您正在返回XML,您可以让控制器返回一个

然后,您需要修改
GlobalConfiguration.Configuration.Formatters
返回XML,或将客户端配置为将应用程序设置为
application/XML

将服务器配置为通过另一种类型(如JSON)返回XML的一种方法是以下代码:

public XDocument returnXMLFile()
{
   var xDoc = XDocument.Load("test.xml");
   return xDoc;
}
然后可以通过超链接将该文件作为xml下载

var xml = new System.Net.Http.Formatting.XmlMediaTypeFormatter();
xml.MediaTypeMappings.Add(new QueryStringMapping("format", "xml", "application/xml"));
GlobalConfiguration.Configuration.Formatters.Add(xml);

要定制,请看一下有关使用Angular js下载文件的这些问题


    • 下面是一个简单得多的例子:

      <a href="[pathToController]/returnxmlfile?format=xml" >Download XML</a>
      
      使用System.Net;
      使用System.Net.Http;
      使用System.Net.Http.Header;
      使用系统文本;
      使用System.Web.Http;
      命名空间WebApplication1.Controllers
      {
      公共类值控制器:ApiController
      {
      //获取:api/值
      公共HttpResponseMessage Get()
      {
      var xmlString=“Some XML”;
      var result=Request.CreateResponse(HttpStatusCode.OK);
      result.Content=newstringcontent(xmlString,Encoding.UTF8,“application/xml”);
      result.Content.Headers.ContentDisposition=新的ContentDispositionHeaderValue(“附件”)
      {
      FileName=“test.xml”
      };
      返回结果;
      }
      }
      }
      
      它认为像这样的东西可以达到目的

         using System.Net;
         using System.Net.Http;
         using System.Net.Http.Headers;
         using System.Text;
         using System.Web.Http;
      
         namespace WebApplication1.Controllers
         {
          public class ValuesController : ApiController
          {
              // GET: api/Values
              public HttpResponseMessage Get()
              {
                  var xmlString = "<xml><name>Some XML</name></xml>";
                  var result = Request.CreateResponse(HttpStatusCode.OK);
                  result.Content = new StringContent(xmlString, Encoding.UTF8, "application/xml");
                  result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                  {
                      FileName = "test.xml"
                  };
      
                  return result;
              }
          }
         }
      

      我正在尝试从数据库获取数据,构建xml,然后通过angular js单击按钮将xml作为文件下载到本地系统。@Chandana控制器方法的返回类型可以是任何类型,框架将为您构建xml。我非常感谢您的帮助和时间。Jonahan的回答符合我的要求,但你的回答对许多像我一样遇到类似情况的人也很有用。我从数据库中获取数据并动态生成xml文件。我正在尝试下载该xml文件。感谢您的编辑,我将完整的xml作为字符串,我正在尝试下载该xml文件。我没有xml文件。很抱歉,我试图切换到另一台计算机来编辑此文件,他们需要一个草稿功能。我进行了另一次更新,您应该能够在字符串变量中获取xml并立即返回。您使用的是Web API 1还是2?我从一个新项目中测试了它,它在Web API 2
      FileProvider
      is ASP.NET Core中正常工作
         using System.Net;
         using System.Net.Http;
         using System.Net.Http.Headers;
         using System.Text;
         using System.Web.Http;
      
         namespace WebApplication1.Controllers
         {
          public class ValuesController : ApiController
          {
              // GET: api/Values
              public HttpResponseMessage Get()
              {
                  var xmlString = "<xml><name>Some XML</name></xml>";
                  var result = Request.CreateResponse(HttpStatusCode.OK);
                  result.Content = new StringContent(xmlString, Encoding.UTF8, "application/xml");
                  result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                  {
                      FileName = "test.xml"
                  };
      
                  return result;
              }
          }
         }
      
      public HttpResponseMessage Get(string fileName)
      {
          FileStream fileStream = FileProvider.Open(fileName);
          var response = new HttpResponseMessage();
          response.Content = new StreamContent(fileStream);
          response.Content.Headers.ContentDisposition 
                            = new ContentDispositionHeaderValue("attachment");
          response.Content.Headers.ContentDisposition.FileName = fileName;
          response.Content.Headers.ContentType
                           = new MediaTypeHeaderValue("application/octet-stream");
          response.Content.Headers.ContentLength 
                           = FileProvider.GetLength(fileName);
          return response;
      }