3

asp.ner mvc Web アプリケーションから BPM エンジンの JSON API を呼び出す必要があります。BPM への API 呼び出しは次のように構成されます。

http://localhost:8080/jw/web/json/workflow/process/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=' + username

ここで、j_user と hash の両方のパラメーターは、BPM エンジン側で設定されたマスター ログイン ユーザー名とパスワードを表します。現在、私はasp.net mvcからビューレベルでjava/scriptを使用してAPIを呼び出しています:-

$(document).ready(function () {
    var fullurl = 'http://localhost:8080/jw/web/json/workflow/package/list?j_username=kermit&hash=9449B5ABCFA9AFDA36B801351ED3DF66&loginAs=' + username ;
    $.ajax({
        type: "GET",
        url: fullurl, 

        dataType: "JSONP",
        // contentType: "application/json; charset=utf-8",
        success: function (result) {

            $.each(result.data, function (key, val) {

                // Format the text to display.
             //   var str = val.packageName + ' | ' + val.packageId;
                var str = val.packageName ;
                // Add a list item for the product.
                $('<li/>', { text: str })
                .appendTo($('#products'));

            });
        }
    });


});

しかし、マスターログインのユーザー名とパスワード、および asp.net mvc でログインユーザーのユーザー名を表す LoginAS ユーザー名の両方を公開することは安全ではなく、代わりにサーバー側で API 呼び出しを実行する必要があると言われました。 JAVASCRIPT から API 呼び出しを行う方法。

しかし、私の質問は、上記のコードを変換して mvc コントローラー側から JSON を受け取り、その JSON をビューに渡す方法です。よろしくお願いします

4

1 に答える 1

7

WebClientを使用して、指定した URL に HTTP リクエストを送信できます。

public class PackagesController: Controller
{
    public ActionResult List()
    {
        using (var client = new WebClient())
        {
            var query = HttpUtility.ParseQueryString(string.Empty);
            query["j_username"] = "kermit";
            query["hash"] = "9449B5ABCFA9AFDA36B801351ED3DF66";
            query["loginAs"] = "some_username";
            var url = new UriBuilder("http://localhost:8080/jw/web/json/workflow/package/list");
            url.Query = query.ToString();
            string json = client.DownloadString(url.ToString());
            return Content(json, "application/json");
        }
    }
}

または、.NET 4.5 で導入された新しいHttpClientを使用できます。

public class PackagesController : AsyncController
{
    public async Task<ActionResult> ListPackages()
    {
        using (var client = new HttpClient())
        {
            var query = HttpUtility.ParseQueryString(string.Empty);
            query["j_username"] = "kermit";
            query["hash"] = "9449B5ABCFA9AFDA36B801351ED3DF66";
            query["loginAs"] = "some_username";
            var url = new UriBuilder("http://localhost:8080/jw/web/json/workflow/package/list");
            url.Query = query.ToString();
            var response = await client.GetAsync(url.ToString());
            var result = await response.Content.ReadAsStringAsync();
            return Content(result, "application/json");
        }
    }
}

そして、JavaScript から AJAX リクエストを前述のアクションに送信します。

<script type="text/javascript">
    $(document).ready(function () {
        $.ajax({
            url: '@Url.Action("List", "Packages")', 
            type: 'GET',
            cache: false,
            success: function (result) {
                $.each(result.data, function (key, val) {
                    var str = val.packageName;
                    $('<li/>', { text: str })
                        .appendTo($('#products'));
                });
            }
        });
    });
</script>
于 2012-10-11T08:55:44.350 に答える