I have some class:
public class Base
{
public string Name;
}
public class AClass : Base
{
public string AAtribute;
}
public class BClass : Base
{
public string BAtribute;
}
I create WebApi with ApiController' class:
public class TestController : ApiController
{
[HttpGet]
public IHttpActionResult GetAll()
{
var d = new List<Base>{
new AClass() { Name = "A", AAtribute = "A1" },
new BClass() { Name = "B", AAtribute = "B1" },
new BClass() { Name = "B", AAtribute = "B2" },
new BClass() { Name = "B", AAtribute = "B3" },
new AClass() { Name = "A", AAtribute = "A2" }
};
return Ok(d);
}
}
Class to call WebApi:
public class RestClient<T> : IDisposable where T : class
{
private readonly string _baseAddress;
public RestClient(string baseAddress)
{
_baseAddress = baseAddress;
}
private void SetupClient(System.Net.Http.HttpClient client, string contentType)
{
client.BaseAddress = new Uri(_baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
}
public async Task<IEnumerable<T>> GetItems(string actionName, string contentType)
{
IEnumerable<T> r = null;
using (var client = new System.Net.Http.HttpClient())
{
SetupClient(client, contentType);
var response = await client.GetAsync(actionName);
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
r = await response.Content.ReadAsAsync<IEnumerable<T>>();
}
}
return r;
}
}
Unit test to call WebApi:
var d = List<Base>();
using (var client = new RestClient<Base>("http://xxx"))
{
try
{
var r = client.GetItems("api/Test/GetAll", "application/json");
var d = r.Result;
foreach (var m in d)
{
var name = m.Name;
Base x;
if (name == "A") x = (AClass) m;
if (name == "B") x = (BClass) m;
if (x == null) continue;
d.Add(x);
}
}
catch (Exception ex)
{
}
}
When i run unit test but exception cast Base to AClass or BClass. How do fix it????
Thanks.
↧
Call webapi return list of object but can not cast to base type of object?
↧