ASP.NET MVC Web API ile Dosya Sunucusu

Örnek projeyi buradan indirebilirsiniz.

  • Asp.Net Web Api projesi oluşturulur.
  • Dosyalar App_Data klasörü altına atılır.
  • Web.Config’de  system.webServer altına aşağıdaki satır eklenir.
    <modules runAllManagedModulesForAllRequests="true"/>
  • Controllers altında FileController.cs oluşturulur.
    using System.IO;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Web;
    using System.Web.Http;
    
    namespace FileServer.Controllers
    {
        public class FilesController : ApiController
        {
            // GET api/files/test_v1.jpg?sessionId=test
            public HttpResponseMessage GetFile(string sessionId, string name)
            {
                HttpResponseMessage response;
    
                // Session kontrolü burada yapılabilir.
                if (sessionId == "test")
                {
                    var filePath = HttpContext.Current.Server.MapPath("~/App_Data/" + name);
    
                    if (File.Exists(filePath))
                    {
                        response = new HttpResponseMessage 
                                       { 
                                           StatusCode = HttpStatusCode.OK, 
                                           Content = new StreamContent(File.OpenRead(filePath)) 
                                       };
    
                        response.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(Path.GetExtension(filePath)));
    
                        return response;
                    }
                    else
                    {
                        response = new HttpResponseMessage(HttpStatusCode.NotFound);
                    }
                }
                else
                {
                    response = new HttpResponseMessage(HttpStatusCode.Forbidden);
                }
    
                return response;
            }
        }
    }
    

Leave a Reply

Your email address will not be published. Required fields are marked *