joh*_* Gu 3 api asp.net-mvc asp.net-mvc-3 asp.net-mvc-4
我需要从我的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
Run Code Online (Sandbox Code Playgroud)
其中j_user和hash参数表示在BPM引擎端设置的主登录用户名和密码.目前我在我的asp.net mvc的视图级别使用java /脚本调用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'));
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
但我被告知暴露主登录用户名和密码以及表示登录用户在asp.net mvc的用户名的LoginAS用户名是不安全的,我应该在服务器端进行API调用从JAVASCRIPT制作API调用.
但我的问题是如何将上面的代码转换为从mvc控制器端接收JSON,然后将JSON传递给视图?最好的祝福
您可以使用WebClient将HTTP请求发送到指定的URL:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用.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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
并从您的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |