ASP.NET वेब एपीआई में नियंत्रक से लौटने वाली बाइनरी फ़ाइल



Answers

वेब एपीआई 2 के लिए , आप IHttpActionResult को कार्यान्वित कर सकते हैं। ये मेरा:

class FileResult : IHttpActionResult
{
    private readonly string _filePath;
    private readonly string _contentType;

    public FileResult(string filePath, string contentType = null)
    {
        if (filePath == null) throw new ArgumentNullException("filePath");

        _filePath = filePath;
        _contentType = contentType;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var response = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StreamContent(File.OpenRead(_filePath))
        };

        var contentType = _contentType ?? MimeMapping.GetMimeMapping(Path.GetExtension(_filePath));
        response.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType);

        return Task.FromResult(response);
    }
}

फिर आपके नियंत्रक में ऐसा कुछ:

[Route("Images/{*imagePath}")]
public IHttpActionResult GetImage(string imagePath)
{
    var serverPath = Path.Combine(_rootPath, imagePath);
    var fileInfo = new FileInfo(serverPath);

    return !fileInfo.Exists
        ? (IHttpActionResult) NotFound()
        : new FileResult(fileInfo.FullName);
}

और यहां एक तरीका है कि आप विस्तार से अनुरोधों को अनदेखा करने के लिए आईआईएस को बता सकते हैं ताकि अनुरोध इसे नियंत्रक के पास कर सके:

<!-- web.config -->
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
Question

मैं एएसपी.नेट एमवीसी की नई वेबएपीआई का उपयोग कर एक वेब सेवा पर काम कर रहा हूं जो बाइनरी फाइलों, ज्यादातर .cab और .exe फ़ाइलों को प्रस्तुत करेगा।

निम्न नियंत्रक विधि काम करने लगती है, जिसका अर्थ है कि यह एक फ़ाइल लौटाता है, लेकिन यह सामग्री प्रकार को application/json :

public HttpResponseMessage<Stream> Post(string version, string environment, string filetype)
{
    var path = @"C:\Temp\test.exe";
    var stream = new FileStream(path, FileMode.Open);
    return new HttpResponseMessage<Stream>(stream, new MediaTypeHeaderValue("application/octet-stream"));
}

क्या ऐसा करने के लिए इससे अच्छा तरीका है?




आप जिस अधिभार का उपयोग कर रहे हैं वह धारावाहिक स्वरूपण की गणना सेट करता है। आपको सामग्री प्रकार को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है:

httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");



तुम कोशिश कर सकते हो

httpResponseMessage.Content.Headers.Add("Content-Type", "application/octet-stream");



Related