2017-09-21 16 views
2

これは、C#バックエンドを持つWebアプリケーション向けです。それが設計されている方法私はこれらのクラスの1つを他のクラスにインポートして直接メソッドを呼び出すことはできません。残念ながら、私たちはビルドプロセスに何か問題がありますので、私はこのコードをデバッグすることができません。できるだけ反復回数を少なくすることを望んでいます。他のC#サーバー側コントローラからASP.NETポストルートを呼び出す

[Route("api/uploadFile/{id}")] 
    [HttpPost] 
    [CustomAuthorize] 
    [SwaggerResponse(HttpStatusCode.OK, Description = "File upload successful")] 
    [SwaggerResponse(HttpStatusCode.InternalServerError, "Error uploading file")] 
    public async Task<IHttpActionResult> PostFile(int id, [FromUri]bool replace=false) 
    { 
     //code to put the file in the database; 
    } 

と私は別のコントローラからそれを呼び出す方法を把握する必要があります:私たちは、このメソッドを持っている一方のコントローラで

。これらの2つのコントローラは、2つの完全に別々のプロジェクトにあり、互いに知りません。

私は、次のバリエーションの一握りを試してみたが、私はただもうそれをハックしたくなかったので、それはそれぞれの変更は、ビルドプロセス中に約8分かかります:

HttpClient htc = new HttpClient(); 
    HttpContent content = new StreamContent(myfile); 
    var response = await htc.PostAsync(this.Url.Content("~/api/uploadFile/9992"), content); 
    var responseString = await response.Content.ReadAsStringAsync(); 
+0

あなたがテストまたは循環参照が作成されます行うために、一時的にそのプロジェクトへの参照を追加することができます。

その後、我々はちょうどこれを行うそこから使用してアセンブリへの参照を取得しますか? –

+1

データベース内のファイルを配置するコードを、両方のルートが呼び出すデータアクセスレイヤークラスライブラリ内の別のクラスに配置する必要があります。コントローラは、このための抽象化の正しいレイヤではありません。 – Kell

+0

@SamMarion私はおそらく一時的にそれを追加することで逃げることができますが、それは価値があるよりも多くの努力をするでしょう。最終的には再解析する必要があり、クライアントから呼び出されたときにPostFileメソッドが正しく機能することがわかっています。サーバーサイドと呼ぶ方法を理解できません。 –

答えて

0

それだから同じサーバーのリフレクションで実行されるすべてが機能する可能性があります。

まず、ポストファイルのロジックを別の方法に移動します。

Assembly assm = Assembly.Load("AssemblyName"); 
object instance = assm.CreateInstance("ClassName"); 
object retVal = instance.GetType().GetMethod("NewMethod").Invoke(instance, null); 
関連する問題