Làm cách nào tôi có thể đọc các loại MIME của IIS? Tôi muốn sử dụng chúng khi tôi truyền dữ liệu đến khách hàng của mình using WCF.Làm cách nào tôi có thể truy vấn IIS cho MIME Type Mappings?
Bất cứ lời khuyên, hoặc API sẽ được đánh giá
Làm cách nào tôi có thể đọc các loại MIME của IIS? Tôi muốn sử dụng chúng khi tôi truyền dữ liệu đến khách hàng của mình using WCF.Làm cách nào tôi có thể truy vấn IIS cho MIME Type Mappings?
Bất cứ lời khuyên, hoặc API sẽ được đánh giá
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?
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.
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
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
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
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 ..? –
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
+1 cho khiếp sợ! Cảm ơn bạn! – LamonteCristo
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
@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