2016-03-22 9 views
4

私は私のwebMethodsのWebサービス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;} 

一つは

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です

これを実現する方法はありますか? ありがとうございます。

+0

'return obj'にブレークポイントを設定します。適切なオブジェクトが返されますか? – Eminem

+0

はい、適切なオブジェクトが返されます。 –

+1

Webブラウザに完全なURL(http:// localhost:8323/somewebservice/isTest?class = fish)を入力し、完全なエラーメッセージを入力します。あなたがIEを使用している場合、私は思うF11を押して、ネットワークの応答を見る – Eminem

答えて

0

あなたはJSON文字列を返していません。 自分の用途に以下を追加します。

using System.Web.Script.Serialization; 

をし、あなたの体の中で、次の

return new JavaScriptSerializer().Serialize(obj); 

変更するには、「HttpResponseMessage」応答をキャストすることができstring代わり

+1

OPは既に 'ResponseFormat = WebMessageFormat.Json'を使用しています。 WCFが翻訳を行うことが期待されています。 – davidshen84

+1

私はオブジェクトを返す必要があります。文字列を返すことは可能な解決策ではありません。 –

0

objectのにあなたの戻り値の型またはCreate responseメソッドでモデルオブジェクトを送信するだけで済みます。

[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"); 
    } 
} 
関連する問題