ASP.NET WEB API не привязывается к динамическому объекту в POST ⇐ C#
ASP.NET WEB API не привязывается к динамическому объекту в POST
Если у вас есть следующий контроллер API... использование StrutureMap для DI...
с использованием системы; использование System.Dynamic; использование System.Net; используя System.Net.Http; используя System.Web.Http; использование IdentityService.Domain; использование IdentityService.Domain.Contracts; использование IdentityService.Domain.Models; пространство имен IdentityService.Controllers { публичный класс AccountController: ApiController { частный только для чтения IRepository _clientRepository; частный только для чтения IRepository _relyingPartyRepository; частный только для чтения IRepository _tokenRepository; публичный AccountController( IRepository clientRepository, IRepository relingPartyRepository, IRepository tokenRepository) { _clientRepository = clientRepository; _relyingPartyRepository = relyingPartyRepository; _tokenRepository = tokenRepository; } Публичное сообщение HttpResponseMessage( [FromBody] динамические данные) { динамический результат = новый ExpandoObject(); пытаться { вар clientAuthenticator = новый ClientAuthenticator( _clientRepository, _relyingPartyRepository, _токенрепозиторий); токен жетон; clientAuthenticator.Authenticate( данные.Ключ, данные.ChecksumValue, данные.Контрольная сумма, данные.Имя, данные.Пароль, выходной токен); результат.Токен = токен; } поймать (Исключение ex) { result.ErrorCode = ex.GetType().ToString(); result.ErrorMessage = ex.GetBaseException().Message; } верните this.Request.CreateResponse(HttpStatusCode.OK, (ExpandoObject)result); } } } Используя Fiddler, я делаю следующее сообщение:
POST http://localhost:54029/api/account HTTP/1.1 Пользовательский агент: Fiddler Хост: локальный хост: 54029 Тип контента: «приложение/json» Длина контента: 218 { "Ключ": "7d42276d3c3954716c672543385b575836472f5d543d7776205627413a", "ChecksumValue": "127.0.0.1", "Контрольная сумма": "ao4Ei77BaX1/iMZMTAJxWzt4fxc=", "Имя": "ИМЯ_ПОЛЬЗОВАТЕЛЯ", «Пароль»: «ПАРОЛЬ» } Есть идеи, почему мои данные будут нулевыми? Я попытался переключиться на JObject, но безуспешно. Все примеры, которые я нашел, заставляют меня думать, что это должно сработать.
Вот полный ответ:
HTTP/1.1 200 ОК Управление кэшем: без кэша Прагма: без кэша Тип контента: приложение/json; кодировка = utf-8 Срок действия истекает: -1 Сервер: Microsoft-IIS/8.0 Версия X-AspNet: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcY29kZS1tYXR0cnVtYVx0YWxrLWF1dGhlbnRpY2F0aW9uLXNlcnZlclxJZGVudGl0eVNlcnZpY2VcYXBpXGFjY291bnQ=?= X-Powered-By: ASP.NET Дата: понедельник, 27 мая 2013 г., 13:59:45 по Гринвичу Длина контента: 137 {"ErrorCode": "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException", "ErrorMessage": "Невозможно выполнить привязку времени выполнения к нулевой ссылке"} Будем очень благодарны за любую помощь!
Обновить
Я попробовал простой пример, например:
public async Task Post(динамические данные) { вар тело = ждут Request.Content.ReadAsStringAsync(); возврат данных; } Параметр data по-прежнему имеет значение null, но я вижу значения в body.
Если у вас есть следующий контроллер API... использование StrutureMap для DI...
с использованием системы; использование System.Dynamic; использование System.Net; используя System.Net.Http; используя System.Web.Http; использование IdentityService.Domain; использование IdentityService.Domain.Contracts; использование IdentityService.Domain.Models; пространство имен IdentityService.Controllers { публичный класс AccountController: ApiController { частный только для чтения IRepository _clientRepository; частный только для чтения IRepository _relyingPartyRepository; частный только для чтения IRepository _tokenRepository; публичный AccountController( IRepository clientRepository, IRepository relingPartyRepository, IRepository tokenRepository) { _clientRepository = clientRepository; _relyingPartyRepository = relyingPartyRepository; _tokenRepository = tokenRepository; } Публичное сообщение HttpResponseMessage( [FromBody] динамические данные) { динамический результат = новый ExpandoObject(); пытаться { вар clientAuthenticator = новый ClientAuthenticator( _clientRepository, _relyingPartyRepository, _токенрепозиторий); токен жетон; clientAuthenticator.Authenticate( данные.Ключ, данные.ChecksumValue, данные.Контрольная сумма, данные.Имя, данные.Пароль, выходной токен); результат.Токен = токен; } поймать (Исключение ex) { result.ErrorCode = ex.GetType().ToString(); result.ErrorMessage = ex.GetBaseException().Message; } верните this.Request.CreateResponse(HttpStatusCode.OK, (ExpandoObject)result); } } } Используя Fiddler, я делаю следующее сообщение:
POST http://localhost:54029/api/account HTTP/1.1 Пользовательский агент: Fiddler Хост: локальный хост: 54029 Тип контента: «приложение/json» Длина контента: 218 { "Ключ": "7d42276d3c3954716c672543385b575836472f5d543d7776205627413a", "ChecksumValue": "127.0.0.1", "Контрольная сумма": "ao4Ei77BaX1/iMZMTAJxWzt4fxc=", "Имя": "ИМЯ_ПОЛЬЗОВАТЕЛЯ", «Пароль»: «ПАРОЛЬ» } Есть идеи, почему мои данные будут нулевыми? Я попытался переключиться на JObject, но безуспешно. Все примеры, которые я нашел, заставляют меня думать, что это должно сработать.
Вот полный ответ:
HTTP/1.1 200 ОК Управление кэшем: без кэша Прагма: без кэша Тип контента: приложение/json; кодировка = utf-8 Срок действия истекает: -1 Сервер: Microsoft-IIS/8.0 Версия X-AspNet: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcY29kZS1tYXR0cnVtYVx0YWxrLWF1dGhlbnRpY2F0aW9uLXNlcnZlclxJZGVudGl0eVNlcnZpY2VcYXBpXGFjY291bnQ=?= X-Powered-By: ASP.NET Дата: понедельник, 27 мая 2013 г., 13:59:45 по Гринвичу Длина контента: 137 {"ErrorCode": "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException", "ErrorMessage": "Невозможно выполнить привязку времени выполнения к нулевой ссылке"} Будем очень благодарны за любую помощь!
Обновить
Я попробовал простой пример, например:
public async Task Post(динамические данные) { вар тело = ждут Request.Content.ReadAsStringAsync(); возврат данных; } Параметр data по-прежнему имеет значение null, но я вижу значения в body.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение