2010-10-14 23 views

Trả lời

2

loại Mime đăng ký vào hệ thống được định nghĩa trong registry dưới "HKEY_CLASSES_ROOT \ Mime \ Database \ Content Type".

Bạn đang tìm kiếm loại mime cho một trang web cụ thể được xác định trong IIS?

12

Tôi đang làm cho giả thiết này là IIS7 chỉ và bạn đang sử dụng C# 3.0 or later:

using Microsoft.Web.Administration; 
.... 
using(ServerManager serverManager = new ServerManager()) 
{ 
    // If interested in global mimeMap: 
    var config = serverManager.GetApplicationHostConfiguration(); 

    // Use if interested in just a particular site's mimeMap: 
    // var config = serverManager.GetWebConfiguration("Default Web Site"); 

    var staticContent = config.GetSection("system.webServer/staticContent"); 
    var mimeMap = staticContent.GetCollection(); 

    // Print all mime types 
    foreach (var mimeType in mimeMap) 
    { 
    Console.WriteLine(String.Format("{0} = {1}", mimeType["fileExtension"], 
     mimeType["mimeType"])); 
    } 

    // Find a mime type based on file extension 
    var mt = mimeMap.Where(
     a => (string) a.Attributes["fileExtension"].Value == ".pdf" 
    ).FirstOrDefault(); 

    if (mt != null) 
    { 
    Console.WriteLine("Mime type for .pdf is: " + mt["mimeType"]); 
    } 
} 

Bạn cần phải tham khảo các Microsoft.Web.Administration.dll trong c:\windows\system32\inetsrv.

Mã của bạn cũng cần quyền Quản trị viên để có thể thực hiện việc này.

+0

+1 cho khiếp sợ! Cảm ơn bạn! – LamonteCristo

+0

Cuối cùng tôi đã thực hiện điều này và có vẻ như tôi cần cấp quyền truy cập IUSR cho 'C: \ Windows \ System32 \ inetsrv'. Từ những gì tôi đã đọc, điều này có thể làm giảm đáng kể bảo mật hệ thống. Quan điểm của bạn là gì? – LamonteCristo

+0

@maker - xem câu cuối cùng của câu trả lời của tôi * "Mã của bạn cũng cần quyền Quản trị viên để có thể thực hiện việc này." *. Bạn đúng rằng việc cho phép tài khoản người dùng ẩn danh của trang web có đặc quyền nâng cao không phải là một ý tưởng hay. Tôi làm việc xung quanh điều này bằng cách sandboxing hoạt động đặc quyền cao trong một quá trình riêng biệt (cửa sổ dịch vụ lưu trữ từ xa hoặc ứng dụng WCF) và phơi bày chỉ chức năng cụ thể cần thiết để thực hiện công việc trong tầm tay. – Kev

0

Là một thay thế để đọc registry, hoặc hạ bảo mật trên thư mục config, có một cơ sở dữ liệu MIME được phổ biến trước trong HTML Agility Pack

+0

Một lời cảnh báo HtmlAgilityPack 1.4.0.0 chỉ sử dụng khoá đăng ký HKEY_CLASSES_ROOT. Vì vậy, bạn sẽ cần truy cập vào sổ đăng ký và loại tệp sẽ được đăng ký trên máy chủ. Bài viết trên blog này khá tốt http://codelog.climens.net/2009/10/28/getting-mime-type-in-net-from-file-extension/ – keza

5

Nếu sử dụng ASP.Net 4.5 hoặc cao hơn, bạn có thể sử dụng System.Web.MimeMapping.GetMimeMapping như sau :

void Page_Init() 
{ 
    string[] extensions = new string[] 
    { 
     ".pdf", 
     ".xls", 
     ".xlsx", 
     ".ppt", 
     ".pptx", 
     ".mp3", 
     ".ogg", 
     ".svg", 
     ".pdf", 
     ".png", 
    }; 

    foreach (string extension in extensions) 
    { 
     string mimeType = MimeMapping.GetMimeMapping(extension); 
     Response.Write(String.Format("{0} => {1}<br />", 
       extension, 
       mimeType 
      )); 
    } 
} 

Kết quả:

.pdf => application/pdf 
.xls => application/vnd.ms-excel 
.xlsx => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
.ppt => application/vnd.ms-powerpoint 
.pptx => application/vnd.openxmlformats-officedocument.presentationml.presentation 
.mp3 => audio/mpeg 
.ogg => video/ogg 
.svg => image/svg+xml 
.pdf => application/pdf 
.png => image/png 
+0

dunno tại sao đây không phải là câu trả lời được chấp nhận. tốt, điều này đòi hỏi quyền quản trị viên ..? –

+1

Nó không yêu cầu quyền quản trị. Khi câu hỏi này ban đầu được yêu cầu chức năng thư viện không tồn tại, do đó, OP chọn câu trả lời tốt nhất vào thời điểm đó. Tôi sử dụng phương pháp mới hơn tất cả thời gian và nó hoạt động tuyệt vời cho tôi. – dana

Các vấn đề liên quan