【发布时间】:2015-05-12 18:51:21
【问题描述】:
这个机会我要感谢所有对此问题有答案的人,我正在尝试从我的 web api 服务中获取一个 json,但我不能这是我在 web api 上的代码...
[ResponseType(typeof(List<CompanyType>))]
[Route("GetList")]
[DeflateCompression]
public async Task<IHttpActionResult> Get()
{
List<CompanyType> companyTypes = (List<CompanyType>)MemoryCacheManager.GetValue(@"CompanyTypes");
if (companyTypes != null) return Ok(companyTypes);
companyTypes = await _CompanyType.Queryable().ToListAsync();
if (companyTypes == null) return Ok(HttpStatusCode.NoContent);
MemoryCacheManager.Add(@"CompanyTypes", companyTypes);
return Ok(companyTypes);
}
在我客户的网站上我得到了这个
public async Task<T> GetAsync<T>(string action, string authToken = null)
{
using (var client = new HttpClient())
{
if (!authToken.IsNullOrWhiteSpace())
client.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(@"Bearer " + authToken);
var result = await client.GetAsync(BuildActionUri(action));
string json = await result.Content.ReadAsStringAsync();
if (result.IsSuccessStatusCode)
return JsonConvert.DeserializeObject<T>(json); //This line fails because the characters in the value
throw new ApiException(result.StatusCode, json);
}
}
正如你所看到的,这里没有什么比奇怪的了
json = ��VR�LQ�R2T�Q�2u�B*R�"E�e�)�@q�������̔Ԣb%��Ҝ�Z�>#�># �>�̊B������J�r2�q�
我不知道为什么我的 webapi 给了我这个值,当我尝试只调试我的服务时它给了我这个值
<ArrayOfCompanyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" ><CompanyType z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><Id>1</Id><Type>Privada</Type><JobProviders i:nil="true" /></CompanyType><CompanyType z:Id="i2" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><Id>2</Id><Type>Mixta</Type><JobProviders i:nil="true" /></CompanyType><CompanyType z:Id="i3" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><Id>3</Id><Type>Publica</Type><JobProviders i:nil="true" /></CompanyType></ArrayOfCompanyType>
您可以看到一切看起来都很好,但是当我尝试解析以从我的客户端获取此值时问题就开始了。
这是我的课
[DataContract(IsReference = true, Name = @"CompanyType", )]
public class CompanyType : Entity
{
[DataMember(Order = 0)]
public int Id { get; set; }
[DataMember(Order = 1)]
public string Type { get; set; }
[DataMember(Order = 2)]
public virtual List<JobProvider> JobProviders { get; set; }
}
我在没有 de DataContracts 的情况下尝试了它,但仍然是同样的错误。
最好的问候!。
【问题讨论】:
-
我认为这是您的 JSON 返回类型的问题。这些链接可能会对您有所帮助 - stackoverflow.com/a/24042770/2501044 stackoverflow.com/a/21651645/2501044
-
你介意 DeflateCompression 属性吗?因为我正在使用这篇文章来使用 gzip 压缩blog.developers.ba/…。如您所见,有这一行 (actContext.Response.Content.Headers.Add("Content-Type","application/json");) 表示响应是 json。
标签: asp.net asp.net-mvc web-services asp.net-web-api json.net