2012-04-24 17 views
9

コードビハインドからASP.NET Web APIを直接呼び出す方法を教えてください。または、コードビハインドからgetJSONメソッドを呼び出すjavascript関数を呼び出す必要がありますか?感謝コードビハインドからASP.NET Web APIを呼び出す

function createFile() { 
     $.getJSON("api/file/createfile", 
     function (data) { 
      $("#Result").append('Success!'); 
     }); 
    } 

任意のポインタ:

は、私は通常のようなものを持っています。 TIA。

* WebFormsを使用しています。

+0

あなたは "コードビハインド" とはどういう意味ですか? – SLaks

+0

@SLaks asp:ボタンがあるとします。クリックイベント(サーバー側/コードビハインド)では、いくつかのことをしてからWeb APIアクション(createfile)を呼びたいと思います。私ははっきりしていると思う。 – Rivka

+0

私のコード例を確認してください。おそらくちょっと素朴で基本的ですが、それはあなたのためだけです。 –

答えて

13

ウェブサービス自体を呼び出す必要がある場合は、HttpClientas described by Henrik Neilsenを試してみることができます。

Updated HTTPClient Samples

基本的な例:

// Create an HttpClient instance 
HttpClient client = new HttpClient(); 

// Send a request asynchronously continue when complete 
client.GetAsync(_address).ContinueWith( 
    (requestTask) => 
    { 
     // Get HTTP response from completed task. 
     HttpResponseMessage response = requestTask.Result; 

     // Check that response was successful or throw exception 
     response.EnsureSuccessStatusCode(); 

     // Read response asynchronously as JsonValue 
     response.Content.ReadAsAsync<JsonArray>().ContinueWith( 
        (readTask) => 
        { 
         var result = readTask.Result 
         //Do something with the result     
        }); 
    }); 
+0

ありがとうございました!まさに私がやろうとしていたこと。おそらくうまく説明できない場合は、他の人には申し訳ありません。すべてのあなたの助けを感謝します。 – Rivka

+0

これをvb.netのrequestTask.Resultに変換しようとすると、「結果はsystem.threading.tasks.taskのメンバーではありませんが、httpresponsemessageで見つかったC#」のメンバーであるとコンパイルされません。このプロパティはvb.netにありませんか?私はテレレックの変換サイトを使って変換を行いました – Matma

3

多くのソフトウェアアーキテクチャの書籍では、(API)コントローラコードにビジネスロジックを入れないことをお勧めします。コントローラコードが現在Serviceクラスまたはファサードを介してビジネスロジックにアクセスしているなど、適切な方法で実装すると仮定すると、フロントドアを通過するのではなく、その目的のために同じサービスクラス/ファサードを再利用することをお勧めします'(その背後にあるコードからJSON呼び出しを行うことによって)基本とnaieve例えば

public class MyController1: ApiController { 

    public string CreateFile() { 
     var appService = new AppService(); 
     var result = appService.CreateFile(); 
     return result; 
    } 

} 

public class MyController2: ApiController { 

    public string CreateFile() { 
     var appService = new AppService(); 
     var result = appService.CreateFile(); 
     return result; 
    } 
} 

AppServiceクラスは、ビジネスロジックをカプセル化(および他の層の上に住んでん)とのあなたのためにそれが容易になりますあなたのロジックにアクセスしてください:

public class AppService: IAppService { 

    public string MyBusinessLogic1Method() { 
     .... 
     return result; 
    } 
    public string CreateFile() { 

      using (var writer = new StreamWriter..blah die blah { 
      ..... 
      return 'whatever result'; 
      } 

    } 

    ... 
} 
+2

私はあなたの「正解」の使い方が間違っていると主張します。コントローラ/ファサード/パス全体が膨大な量の無駄なコード/人数であると言うように、これを支持する設計パラダイムは確かにあります。私はdownvoteするつもりはない。しかし、私は、ソフトウェア設計のための多くの定義が状況に依存しているための「正しい」という多くの定義があると言っています。 – NotMe

+1

真実、私の英語は完璧ではない、正しい単語ではなかった。 –

+1

例を提供していただきありがとうございます。 WebAPIのCreateFile()の実際のメソッド呼び出しにもかかわらず、私はあなたがクラスについて何を言っているのか分かります。 Webフォームアプリケーションのサーバーサイドイベントからどのように呼び出す必要がありますか?最善のアプローチは何ですか? – Rivka

6

論理を別のバックエンドクラスにリファクタリングし、それをyouirコードビハインドとWeb APIアクションから直接呼び出す必要があります。

+0

いくつかのサンプルコードは役に立ちます...「あなたのコードビハインドから直接呼び出してください私は私のJS機能でそれを行います。 – Rivka

+0

@Becky:コードビハインドから直接別のクラスを呼び出します。 – SLaks

関連する問題