По спецификациям HTTP GET является безопасным и идемпотентным, а POST - ни тем, ни другим. Это означает, что запрос GET может повторяться несколько раз, не вызывая побочных эффектов.
Даже если вашему серверу все равно (и это маловероятно), между вашим клиентом и сервером могут быть промежуточные агенты, у всех которых есть это ожидание. Например, прокси-серверы кэшируют данные у вашего интернет-провайдера или других поставщиков для повышения производительности.
Таким образом, запрос GET может быть кэширован (на основе определенных параметров), и если он терпит неудачу, он может быть автоматически повторен без любое изложение вредных эффектов. Итак, на самом деле ваш сервер должен стремиться выполнить этот контракт.
С другой стороны, POST небезопасен, а не идемпотентен, и каждый агент знает, что он не кэширует результаты запроса POST или не повторяет запрос POST автоматически. Так, например, транзакция с кредитными картами никогда бы никогда не была запросом GET (вы не хотите, чтобы счета дебетовали несколько раз из-за сетевых ошибок и т. Д.).
Это очень простой подход к этому , Для получения дополнительной информации вы можете рассмотреть книгу «RESTful Web Services» Руби и Ричардсона (пресс-релиз O'Reilly).
Для быстрого изучения темы REST рассмотрите этот пост:
http://www.25hoursaday.com/weblog/2008/08/17/ExplainingRESTToDamienKatz .aspx
Самое смешное, что большинство людей обсуждают достоинства PUT v POST. Проблема GET v POST и всегда была очень хорошо решена. Игнорируйте его на свой страх и риск.
Простое выполнение Map( m => m.MyEnum ).CustomType<MyEnum>()
, кажется, работает отлично.
Если кто-нибудь знает, почему IUserTypeConvention
не работает с Fluent NHibernate в NHibernate 3, я все равно хотел бы знать, почему. Может быть, это потому, что сопоставление пользовательского типа с перечислением работает сейчас, но почему тогда его не удалили из библиотеки?
Я сталкиваюсь с подобной проблемой с Nhibernate 3.0GA и FluentNh (пересобрать с последней версией NH). UserTypeConventions не регистрируются должным образом.
описанная здесь проблема: http://groups.google.com/group/nhusers/browse_thread/thread/c48da661f78bfad0
Вы должны наследовать свое соглашение не от IUserTypeConvention, а от FluentNHibernate.Conventions.UserTypeConvention.
Например, это именно то соглашение, которое я использую, чтобы отобразить логические и обнуляемые логические значения в пользовательский тип с именем UserTrueFalseType :
/// <summary>
/// Convention: Boolean fields map to CHAR(1) T/F/Null
/// </summary>
public class BooleanTrueFalseConvention : FluentNHibernate.Conventions.UserTypeConvention<UserTrueFalseType>
{
/// <summary>
/// Accept field type criteria
/// </summary>
/// <param name="criteria"></param>
public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
{
criteria.Expect(instance =>
instance.Property.PropertyType.Equals(typeof(System.Boolean))
||
instance.Property.PropertyType.Equals(typeof(System.Nullable<System.Boolean>))
);
}
}
Это работает с NH 3.3 и последней версией Свободно.