2015-11-09 2 views
0

Я пытаюсь вызвать мой веб-апи от сети переменного тока # клиента приложениеНеверный запрос при вызове мой Web API

Это мой API код сервера управления:

public IEnumerable<Services.Customer> Get(Guid CompanyRef) 
    { 
     return customerRepository.Get(CompanyRef); 
    } 

    public Models.CustomerAddress Add(Guid CompanyRef, string ContactNo, Guid CustomerRef, string DOE, string Email, string FName, string SName, 
     Guid? addressRef, string add1, string add2, string add3, string town, string county, string pCode, string country) 
    { 
     var res= customerRepository.Add(CompanyRef, ContactNo, CustomerRef, DOE, Email, FName, SName, 
      addressRef, add1, add2, add3, town, county, pCode, country); 
     return new Models.CustomerAddress { 
      AddressRef =res.AddressRef, 
      CustomerRef =res.CustomerRef, 
      CustomerExists= (res.CustomerRef==CustomerRef)? true : false 
     }; 
    } 

, введя Ури прямо в браузере Я могу проверить это.

http://myipaddress/api/Customer?CompanyRef=00000000-0000-0000-0000-00000000000&ContactNo=contactno2&CustomerRef=00000000-0000-0000-0000-000000000000&DOE=doe2&Email=email2&FName=fname2&SName=sname2&AddressRef=00000000-0000-0000-0000-000000000000&Add1=add1&Add2=add2&Add3=add3&Town=town&County=county&PCode=pcode&Country=country 

, но я получаю такой ответ:

Error> 
<Message>The request is invalid.</Message> 
</Error> 

Я не могу видеть, что я делаю не так?

благодарит

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Это мой код для вызова его из C# настольного клиента:

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri(Shared.URL); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Shared.HeaderType)); 
    var response = client.PostAsync(route + "?" + 
     GeneralTags.COMPANY_REF + "=" + ApplicationObject.CompanyRef + "&" + 
     GeneralTags.CONTACT_NO + "=" + customer.ContactNo + "&" + 
     GeneralTags.CUSTOMER_REF + "=" + customerLookUpResult.CustomerRef + "&" + 
     GeneralTags.DOE + "=" + customer.DOE + "&" + 
     GeneralTags.EMAIL + "=" + customer.Email + "&" + 
     GeneralTags.FNAME + "=" + customer.FName + "&" + 
     GeneralTags.SNAME + "=" + customer.SName + "&" + 
     GeneralTags.ADDRESS_REF + "=" + addressLookUpResult.AddressRef + 
     GeneralTags.ADD1 + "=" + customer.Add1 + "&" + 
     GeneralTags.ADD2 + "=" + customer.Add2 + "&" + 
     GeneralTags.ADD3 + "=" + customer.Add3 + "&" + 
     GeneralTags.TOWN + "=" + customer.Town + "&" + 
     GeneralTags.COUNTY + "=" + customer.County + "&" + 
     GeneralTags.PCODE + "=" + customer.PCode + "&" + 
     GeneralTags.COUNTRY + "=" + customer.Country 
     , null).Result; 

    response.EnsureSuccessStatusCode(); 
    string json = await response.Content.ReadAsStringAsync(); 
    var objs = JArray.Parse(json); 
    return JsonConvert.DeserializeObject<Model.CustomerAddress>(response.Content.ReadAsStringAsync().Result); 
} 

Когда я использую это он идет в мою:

public IEnumerable<Services.Customer> Get(Guid CompanyRef) 

МОДИФИЦИРОВАННЫЙ URI: L

Это мой URI:

"http://uri/api/Customer/Add?CompanyRef=00000000-0000-0000-0000-000000000000&ContactNo=contactno2&CustomerRef=00000000-0000-0000-0000-000000000000&DOE=doe2&Email=email2&FName=fname2&SName=sname2&AddressRef=00000000-0000-0000-0000-000000000000Add1=add1&Add2=add2&Add3=add3&Town=town&County=county&PCode=pcode&Country=country" 
+0

Как зовут ваш контроллер? –

+0

Мы отлаживаем, это попадает в контроллер? –

+0

@PraveenPaulose это: public class CustomerController: ApiController –

ответ

1

Ваша подпись не совпадает с контроллером. Модельное связующее ожидает GUID, но вы проходите намного больше.

Pass вместо этого: http://myipaddress/api/Customer?CompanyRef=(enter Guid здесь)

+0

Привет, Билл, спасибо за ваш ответ. Я обновил свой ответ. Переменные, которые я передал, являются GUID. Возможно, тестирование через браузер не было такой замечательной идеей :) –

+0

Должен работать в браузере. Я бы рекомендовал либо Fiddler, либо Postman. Отлично подходит для работы webapi. –

+0

спасибо. Я сейчас пытаюсь Fiddler –

1

В контроллере, у вас есть метод, называемый Add. Этот метод не украшен [HttpGet]. Похоже, это метод POST. Таким образом вы не можете вызвать метод POST из URL-адреса браузера.

Если вы хотите, чтобы она вызывалась добавить атрибут к Add действия

[HttpGet] 
public Models.CustomerAddress Add(Guid CompanyRef, string ContactNo, Guid CustomerRef, string DOE, string Email, string FName, string SName, 
    Guid? addressRef, string add1, string add2, string add3, string town, string county, string pCode, string country) 
{ 
    var res= customerRepository.Add(CompanyRef, ContactNo, CustomerRef, DOE, Email, FName, SName, 
     addressRef, add1, add2, add3, town, county, pCode, country); 
    return new Models.CustomerAddress { 
     AddressRef =res.AddressRef, 
     CustomerRef =res.CustomerRef, 
     CustomerExists= (res.CustomerRef==CustomerRef)? true : false 
    }; 
} 

После того, как вы сделали это, вам нужно будет вызвать его, используя URL-адрес с действия Добавить указанный

http://myipaddress/api/Customer/Add?CompanyRef=00000000-0000-0000-0000-00000000000&ContactNo=contactno2&CustomerRef=00000000-0000-0000-0000-000000000000&DOE=doe2&Email=email2&FName=fname2&SName=sname2&AddressRef=00000000-0000-0000-0000-000000000000&Add1=add1&Add2=add2&Add3=add3&Town=town&County=county&PCode=pcode&Country=country 

Если вам нужен метод POST, вы можете использовать POSTMAN для проверки вашего URL-адреса.

+0

Если вы добавляете, не хотите ли вы украсить HttpPost? –

+0

@BillMartin Да, должно. Вот почему последняя строка в ответе. Андрей пытался проверить его через браузер, поэтому предложение. –

+0

@BillMartin объясняет, почему то, что висит на века :) –

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