【发布时间】:2015-11-09 15:14:18
【问题描述】:
我正在尝试从 c# 客户端应用程序调用我的 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
};
}
通过直接在浏览器中输入 uri,我可以对此进行测试。
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"
【问题讨论】:
-
你的控制器叫什么名字?
-
我们调试,是不是碰到控制器了?
-
@PraveenPaulose 它是:公共类 CustomerController : ApiController
-
@BillMartin 不是来自浏览器,但如果我从 c# 桌面创建一个 httpclient,它会出于某种原因进入公共 IEnumerable
Get(Guid CompanyRef) -
在您的
PostAsync调用中,您将传递一个HttpContent实例,而不是传递null,看看这个其他问题:stackoverflow.com/questions/24109246/…
标签: c# asp.net-web-api