Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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# 为什么我需要内容/类型变量?_C#_Asp.net Core Mvc_Content Type - Fatal编程技术网

C# 为什么我需要内容/类型变量?

C# 为什么我需要内容/类型变量?,c#,asp.net-core-mvc,content-type,C#,Asp.net Core Mvc,Content Type,在我的MVC核心应用程序中,我在我的控制器中提供了一种方式,用户可以下载我保存的图像,通过单击视图中的按钮调用该图像。我不明白为什么在返回文件()中需要第二个变量“contentType”字符串。如果我把图片放在“application/pdf”而不是“application/jpg”中,我仍然可以把它作为.jpg下载,那么除了它是必需的之外,还有什么别的意义呢。这个变量的意义是什么 public FileStreamResult Download() { string

在我的MVC核心应用程序中,我在我的控制器中提供了一种方式,用户可以下载我保存的图像,通过单击视图中的按钮调用该图像。我不明白为什么在返回文件()中需要第二个变量“contentType”字符串。如果我把图片放在“application/pdf”而不是“application/jpg”中,我仍然可以把它作为.jpg下载,那么除了它是必需的之外,还有什么别的意义呢。这个变量的意义是什么

public FileStreamResult Download()
    {
        string filename = "Capture.JPG";
        string filepath = hostingEnvironment.WebRootPath + "\\Image";
        string fullName = Path.Combine(filepath, filename);
        return File(new FileStream(fullName, FileMode.Open), "application/pdf", filename);
    }

Flydog的评论非常中肯;在声明内容类型时,您可能会发现最有用或最明显的区别是浏览器可能会根据设置使用它来调用不同的行为。如果将mp4视频作为“视频/mp4”发送,浏览器可能会在其视口中播放它。如果发送与“应用程序/八位字节流”相同的文件,则可能会提供另存为。如果您声明一种内容类型而实际上是另一种,则浏览器可能会忽略您(注意:声明pdf为pdf或八位字节流都是合理的/正确的。声明它为jog则不是)。内容配置在服务器中也起着一定作用,旨在为浏览器提供有关如何处理文件的指导


…但首先,我想说的是,说出内容类型真相的一个很好的理由(即,当它是pdf时,不要声称它是jpg)是互操作咒语“当它要求遵守标准时,对发送的内容严格,对接受的内容自由”-您正在发送,所以遵循协议:)

,这样它就知道要返回什么类型的文件。我不是这方面的专家,但我可以想象,这就是(部分)你告诉浏览器如何将文件与另一个网页区分开来的方式,而且浏览器足够聪明,知道如何处理不同的文件类型。此外,在某些操作(如下载文件)可能同时适用的情况下,文件可能足够相似。但是很多浏览器都有预览功能,如果你试图在一个需要JPG的浏览器中预览PDF文件,那么这就会中断。但是我不明白为什么应用程序/zip或应用程序/json仍然可以工作,因为它们非常不同?代码需要知道类型,比如:二进制、xml、文本、,或者json,这样服务器就知道如何解码,并且它的类型是编码的(base64字符串)。如果是jpg或pdf,那么什么类型的二进制文件可能并不重要。但需要知道什么时候是其他类型。浏览器(也称为“用户代理”)可以查看内容类型并决定如何解释它。例如,如果您下载一个PDF文件(
“应用程序/PDF
),浏览器可能会下载该文件并启动一个PDF查看器,例如,
应用程序/PDF
的图像查看器。服务器可能会撒谎,但浏览器希望它说出真相,并且可能会使用该信息执行特定于内容类型的操作