C# Rest API возвращает динамический объект
У меня есть веб-сервис
WebServiceHost webServiceHost= new WebServiceHost(typeof(WebMethods), new Uri(url));
webServiceHost.Open();
public class Fish { public string name = "I am a fish"; }
public class Dog { public int legs = 4; }
public class Cat { public DateTime dt = DateTime.Now;}
Один из моих webMethods должен возвращать динамический объект
WebMethod:
Решение 1
[OperationBehavior]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/isTest?class={cl}")]
object isTest(string cl)
{
object obj;
switch (cl)
{
case "fish":
obj= new Fish();
break;
case "dog":
obj= new Dog();
break;
default:
obj= new Cat();
break;
}
return obj;
}
Решение 2
[OperationBehavior]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/isTest?class={cl}")]
dynamic isTest(string cl)
{
dynamic obj;
switch (cl)
{
case "fish":
obj= new Fish();
break;
case "dog":
obj= new Dog();
break;
default:
obj= new Cat();
break;
}
return obj;
}
Оба не работают. Ответ ERR_CONNECTION_RESET
Есть идеи как это реализовать? Спасибо за помощь.
2 ответа
Вы не возвращаете строку JSON. Добавьте следующее к вашим потребностям:
using System.Web.Script.Serialization;
и следующее в вашем теле
return new JavaScriptSerializer().Serialize(obj);
измените тип возврата на string
вместо object
Вы можете привести ответ "HttpResponseMessage" или просто отправить объект модели в метод создания ответа.
[WebGet(UriTemplate = "{id}")]
public HttpResponseMessage isTest(int id)
{
Model model = Model.table.Where(p => p.Id == id).FirstOrDefault();
if (model != null)
{
//return Request.CreateResponse<Model>(HttpStatusCode.OK, model);
//or
return Request.CreateResponse(HttpStatusCode.OK, model);
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Model Not Found");
}
}