私は.netサービスを持っています。MVC Web アプリケーションでホストされている Web サイト サービスで使用したい。MVC パターンでそれを行うのに最適な設計は何ですか。
1 に答える
解決策は、最終的には 1) 時間と 2) セキュリティに依存します。十分な時間があれば、外部 Web サービス メソッドへのアクセスにセキュリティを設定できるラッパー API に投資できます。JavaScriptコードで外部サービスに直接アクセスしたくないと思います。「レコード XYZ を要求したユーザー」などの情報が必要な場合は、監査をラッパー API にラップすることもできます。クライアント側でもいくつかの Web サービス メソッドを呼び出したいと思うでしょう。
単純な呼び出しの場合は、ajax を使用して (コントローラーを介して) サービスを呼び出します。大きな結果が返される場合は、コントロールで Web サービスを直接呼び出して、データをビュー モデルにプッシュする必要があるかもしれません。
Web サービスの結果を json に取得する例:
public ActionResult MarkEmployeeAsInactive() {
// Check if user is allowed to make the change to this employee?
// Check if session is valid if not using OAUTH etc
var client= new MyWebServiceClient();
var result = client.SetEmployeeInactive(443);
return Json(result);
}
public ActionResult GetList() {
// Check if user is allowed to make the get this list
// Check if session is valid if not using OAUTH etc
var client= new MyWebServiceClient();
var result = client.GetListOfEmployees(23443);
return Json(result); // Returns json List<Employee>
}
必要に応じて、そのアクションの結果をWebApi
コントローラーに変えることができます。基本的にはWebApi
、既存の Web サービスのラッパーを作成します (もちろん、パブリックから保護され、サーバー側のみが呼び出されます)。
または、IEnumerable の結果を Web サービスからビュー モデルに渡すこともできます。またはT
、ビューモデルに戻るだけです。
public ActionResult Employee()
{
var client= new MyWebServiceClient();
var employee = client.GetEmployeeRecord(33445);
// perhaps employee has a property called FullName?
// That will map to the model then
return View(employee); // Passes Employee class to view
}
追加情報については、この同様の質問ASP.NET MVC & Web Servicesをご覧ください。