none
ASP.NET Web API и динамические типы RRS feed

  • Вопрос

  • Привет всем!

    Как думаете на сколько правильно использовать динамические типы (dynamic) в Web api контроллерах?

    Пример: 

            public HttpResponseMessage Post(dynamic renameLayer)
            {
                    try
                    {
                        _layerRepository.RenameLayer(renameLayer.LayerId, renameLayer.Name);
                        return Request.CreateResponse(HttpStatusCode.OK);
                    }
                    catch (Exception e)
                    {
                        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
                    }
            }
    6 февраля 2013 г. 8:33

Ответы

  • Однозначный ответ тут дать сложно. Вопрос аналогичен следующему: "Насколько правильно использовать dynamic в C#". Тут уже приходится делать выбор в зависимости от ситуации. Т.е. само использование dynamic в данном случае не является ошибкой или чем то ещё. Это удобно, так как не нужно писать лишний код по привязке модели и классов моделей (как обычных так и DTO). По сути Вы говорите я ожидаю renameLayer.LayerId как целое число и я его получу скорее всего, но нет никаких гарантий, что это будет число, а не что нибудь другое. Поэтому вам нужно в этом случае сделать проверку значений из dynamic самому, который раньше за Вас делал Model Binder. Иногда это сложно иногда нет, зависит от того что вы используете в данный момент. Если объект простой (состоит из пары свойств) то ничего сложного, а если сложный то и проверка многократно усложнается, не лучше ли тогда писать свой Model Binder. Вот Вам хорошая статья, общие идеи она даёт и будет полезной, хотя привязка в Web API немного отличается от MVC.
    6 февраля 2013 г. 10:06
    Модератор