Asp.net mvc 如何在发送文件后维护特定于供应商的内容类型?

Asp.net mvc 如何在发送文件后维护特定于供应商的内容类型?,asp.net-mvc,asp.net-core,content-type,Asp.net Mvc,Asp.net Core,Content Type,将具有供应商特定内容类型的文件发送到应用程序时,您的内容类型将转换为不同的内容类型 问题:如何在上载/存储(Azure)/下载中保留原始内容类型。是否应该对Startup.cs或Web.config进行任何更改(手动完成,但是否有效) 内容类型原件:应用程序/vnd.ms pki.stl 发送或自动绑定后的内容类型(我没有确定转换何时完成):应用程序/octet流 提交:表单通过Ajax发送 $.ajax({ url: url, data: new FormDat

将具有供应商特定内容类型的文件发送到应用程序时,您的内容类型将转换为不同的内容类型

问题:如何在上载/存储(Azure)/下载中保留原始内容类型。是否应该对
Startup.cs
Web.config
进行任何更改(手动完成,但是否有效)

内容类型原件:
应用程序/vnd.ms pki.stl

发送或自动绑定后的内容类型(我没有确定转换何时完成):
应用程序/octet流

提交:表单通过Ajax发送

$.ajax({
        url: url,
        data: new FormData($("#")[0]),
        type: 'POST',
        processData: false,
        contentType: false,
        beforeSend: function () {
            // omitted
        },
        success: function (data) {
            // omitted
        },
        error: function (data) {
            // omitted
        }
   });
目标行动:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(PrintObjectCreateVM printObject)
    {

            if (!ModelState.IsValid)
            {
                return NotFound();
            }

            await PrintObjectService.Insert(printObject);

            return Ok();
    }
public class PrintObjectCreateVM
{
    public IFormFile PrintObjectImage { get; set; }

    public IFormFile PrintObjectPrintFile { get; set; }
}

当浏览器无法确定要上载的文件的内容类型(例如,从文件扩展名或操作系统键入信息推断)时,它默认为
application/octet-stream

对于下载,请在返回文件时手动设置
内容类型
。如果框架无法识别任何客户端都应该能够处理的默认内容
应用程序/octet流

比如说

[Route("api/[controller]")]
public class DownloadController : Controller {
    //GET api/download/12345abc
    [HttpGet("{id}"]
    public async Task<IActionResult> Download(string id) {
        var stream = await {{__get_stream_here__}}
        var response = File(stream, "application/vnd.ms-pki.stl"); // FileStreamResult
        return response;
    }    
}
[路由(“api/[控制器]”)]
公共类下载控制器:控制器{
//获取api/下载/12345abc
[HttpGet(“{id}”]
公共异步任务下载(字符串id){
var stream=await{{{{uuuuu get{u stream}
var response=File(流,“application/vnd.ms pki.stl”);//FileStreamResult
返回响应;
}    
}

显示url正在调用的目标操作。您需要在控制器操作的响应中设置它。@Nkosi添加了操作和模型,可能可以下载,但在上传时,我需要检查应用程序是否接受该内容类型。@Ricardo我仍在搜索,但暂时看看这个。看起来是什么似乎上传文件的浏览器无法识别文件的自定义供应商mime类型。@Ricardo发现了一些有希望的东西。请尝试在输入标记上设置类型,例如
参考,以了解有关如何设置的详细信息it@Ricardo,我创建了一个小项目,并使用已知和未知的文件类型对其进行了测试g已知类型内容类型由浏览器正确设置,未知的内容类型设置为
application/octet stream
。这表明它依赖于客户端,不在您的控制范围内。我理解,因此在将其发送到服务器之前,我将使用此插件验证浏览器的格式,谢谢!