2016-06-09 1 views
2

У меня возникли проблемы с использованием веб-API с MVC, не уверен, что вызывает его, но он не генерирует никаких исключений или ошибок в режиме отладки, пожалуйста может кто-то помочь решить эту проблему.HttpClient.PostAsJsonAsync не работает или не дает ошибок в режиме отладки

код выглядит следующим образом:

MVC контроллер вызывает:

PortalLogonCheckParams credParams = new PortalLogonCheckParams() {SecurityLogonLogonId = model.UserName, SecurityLogonPassword = model.Password}; 

SecurityLogon secureLogon = new SecurityLogon(); 

var result = secureLogon.checkCredentials(credParams); 

Доступ к данным Метод объекта:

public async Task <IEnumerable<PortalLogon>> checkCredentials(PortalLogonCheckParams credParams) 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:50793/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     // Check Credentials 

     //Following call fails 

     HttpResponseMessage response = await client.PostAsJsonAsync("api/chkPortalLogin", credParams); 


     if (response.IsSuccessStatusCode) 
     { 
      IEnumerable<PortalLogon> logonList = await response.Content.ReadAsAsync<IEnumerable<PortalLogon>>(); 
      return logonList; 
     } 
     else return null; 
    } 

} 

Web API:

[HttpPost] 
public IHttpActionResult chkPortalLogin([FromBody] PortalLogonCheckParams LogonParams) 
{ 

    List<Mod_chkPortalSecurityLogon> securityLogon = null; 

    String strDBName = ""; 

    //Set the database identifier   
    strDBName = "Mod"; 

    //Retrieve the Logon object 
    using (DataConnection connection = new DataConnection(strDBName)) 
    { 
     //Retrieve the list object 
     securityLogon = new Persistant_Mod_chkPortalSecurityLogon().findBy_Search(connection.Connection, LogonParams.SecurityLogonLogonId, LogonParams.SecurityLogonPassword); 
    } 

    AutoMapper.Mapper.CreateMap<Mod_chkPortalSecurityLogon, PortalLogon>(); 

    IEnumerable<PortalLogon> securityLogonNew = AutoMapper.Mapper.Map<IEnumerable<Mod_chkPortalSecurityLogon>, IEnumerable<PortalLogon>>(securityLogon); 


    return Ok(securityLogonNew); 

} 
+0

Вы пробовали звонить через скрипач или пользовательский интерфейс SOAP, если вы так, то какой код ответа? – din

+3

Что значит «не работает»? Где это происходит? Чего вы ожидаете? – DavidG

+0

Удалите атрибут '[FromBody]' из параметра. – Nkosi

ответ

1

Вы должны удалить атрибут [FromBody] из параметра

Using [FromBody]

Чтобы заставить Web API читать простой тип из тела запроса, добавьте [FromBody] атрибут в параметр:

public HttpResponseMessage Post([FromBody] string name) { ... } 

В этом примере Web API будет используйте форматтера медиа-типа, чтобы прочитать значение имени из тела запроса. Вот пример запроса клиента .

POST http://localhost:5076/api/values HTTP/1.1 
User-Agent: Fiddler 
Host: localhost:5076 
Content-Type: application/json 
Content-Length: 7 

"Alice" 

Когда параметр имеет [FromBody], Web API использует Content-Type заголовка для выбора форматчик. В этом примере тип содержимого: «application/json», а тело запроса - это строка JSON с сыром (а не объект JSON ).

Максимально один параметр разрешен для чтения из тела сообщения.

Смежные вопросы