ASP.NET/IIS6: Как искать карту пантомимы сервера?

Используйте TypeVar() для объявления переменной типа и используйте Generic в качестве базового класса.

from typing import TypeVar, Generic
T = TypeVar('T')
class Classy(Generic[T]):
    def __init__(self, x: T) -> None:
        self.value = x
    def get_value(self) -> T:
        return self.value

Вы можете попробовать:

class1 = Classy[int](100)
class2 = Classy[str]('abc')
print(class1.get_value())
print(class2.get_value())

Тогда вы увидите:

100
abc
11
задан Fionnuala 19 November 2008 в 18:26
поделиться

3 ответа

Вот тот, который я сделал ранее:

public static string GetMimeTypeFromExtension(string extension)
{
    using (DirectoryEntry mimeMap = 
           new DirectoryEntry("IIS://Localhost/MimeMap"))
    {
        PropertyValueCollection propValues = mimeMap.Properties["MimeMap"];

        foreach (object value in propValues)
        {
            IISOle.IISMimeType mimeType = (IISOle.IISMimeType)value;

            if (extension == mimeType.Extension)
            {
                return mimeType.MimeType;
            }
        }

        return null;

    }
}

Добавьте ссылку на System.DirectoryServices и ссылка на Active DS IIS Namespace Provider под вкладкой COM. Расширение должно иметь ведущую точку, т.е. .flv.

10
ответ дан 3 December 2019 в 04:54
поделиться

IIS хранит информацию MIME в своей собственной базе данных. Поиск "MimeMap IIS" в Интернете покажет, как считать его или даже изменить его. Посмотрите, например, C# - Как отобразить записи MimeMap в консоль от экземпляра IIS.

1
ответ дан 3 December 2019 в 04:54
поделиться

Вот еще одна похожая реализация, но не требует добавления ссылки COM - вместо этого она извлекает свойства посредством отражения и сохраняет их в NameValueCollection для облегчения поиска:

using System.Collections.Specialized; //NameValueCollection
using System.DirectoryServices; //DirectoryEntry, PropertyValueCollection
using System.Reflection; //BindingFlags

NameValueCollection map = new NameValueCollection();
using (DirectoryEntry entry = new DirectoryEntry("IIS://localhost/MimeMap"))
{
  PropertyValueCollection properties = entry.Properties["MimeMap"];
  Type t = properties[0].GetType();

  foreach (object property in properties)
  {
    BindingFlags f = BindingFlags.GetProperty;
    string ext = t.InvokeMember("Extension", f, null, property, null) as String;
    string mime = t.InvokeMember("MimeType", f, null, property, null) as String;
    map.Add(ext, mime);
  }
}

Вы можете очень легко кэшировать эту таблицу поиска, а затем ссылка на него позже:

Response.ContentType = map[ext] ?? "binary/octet-stream";
12
ответ дан 3 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: