1

私のwebApiコントローラー

[HttpPost]
public ISearchProviderCommandResult ExecuteCommand(ISearchProviderCommand command)
{
  MySearchProvider searchProvider = new MySearchProvider();
  return searchProvider.ExecuteCommand(command);
}

私のsearchCommandオブジェクト

[Serializable]
class SearchProviderCommand : ISearchProviderCommand
{
  public string OperationContext {get; set;}
  public string OperationId{get; set;}
}

webapiコントローラーにブレークポイントがあり、HttpWebResponse response =(HttpWebResponse)request.GetResponse();という行にブレークポイントがあります。

webapiコントローラーにステップインしようとすると、500エラーが発生し、webapiコントローラー内のブレークポイントに到達しません。これが私の質問です:

  1. 私は何が間違っているのですか?
  2. 複雑なオブジェクトをWebAPIリクエストに送信できますか?

編集:asp.netフォーラムとレオンの指示に基づいて、インターフェイスの代わりにオブジェクトを使用するようにWebApiコントローラーを変更しました。これは機能します。

[HttpPost]
public SearchProviderCommandResult ExecuteCommand(SearchProviderCommand command)
{
  MySearchProvider searchProvider = new MySearchProvider();
  return searchProvider.ExecuteCommand(command);
}

結果からオブジェクトを再構築する方法を教えてください。

編集:ベースのレオンの提案-ここに興味がある人のために私の最後の発信者コードです

public result ExecuteCommand(ISearchProviderCommand searchCommand)
{
  //serialize the object before sending it in
  JavaScriptSerializer serializer = new JavaScriptSerializer();
  string jsonInput = serializer.Serialize(searchCommand);

  HttpClient httpClient = new HttpClient() { BaseAddress = new Uri(ServiceUrl) };
  StringContent content = new StringContent(jsonInput, Encoding.UTF8, "application/json");
  var output = httpClient.PostAsync(ServiceUrl, content).Result;

  //deserialize the output of the webapi call
  result c = serializer.Deserialize<result>(output.Content.ReadAsStringAsync().Result);

  return c;
 }
}

public class result : ISearchProviderCommandResult
{
  public object Result { get; set; }
}
4

1 に答える 1

1

BinaryFormatter を使用していますか? それがあなたが送信しているものなので、リクエストを JSON としてエンコードするべきではありませんか?

于 2012-06-27T09:22:43.880 に答える