从razor模板调用外部API

从razor模板调用外部API,razor,2sxc,Razor,2sxc,我试图在我的2sxc razor模板中使用MS Dynamics API JSON响应作为数据源。出于安全原因,我希望将查询生成为服务器端post请求。我的代码必须存在于razor模板中,因为我没有FTP权限上载自定义代码或库 我一直尝试在自定义应用程序中使用的标准异步请求 private static readonly HttpClient client = new HttpClient(); protected void Page_Load(object sender

我试图在我的2sxc razor模板中使用MS Dynamics API JSON响应作为数据源。出于安全原因,我希望将查询生成为服务器端post请求。我的代码必须存在于razor模板中,因为我没有FTP权限上载自定义代码或库

我一直尝试在自定义应用程序中使用的标准异步请求

  private static readonly HttpClient client = new HttpClient();


        protected void Page_Load(object sender, EventArgs e)
        {
            GetData();
        }


        public async void GetData() {

            var requestparams = new Dictionary<string, string>
            {
                { "key", "123456789" },
                { "Operation", "GetEntityTypes" }
            };

            var content = new FormUrlEncodedContent(requestparams);

            var response = await client.PostAsync("https://api.someserver.com/", content);

            var responseString = await response.Content.ReadAsStringAsync();

            Response.Write(responseString);

        }
我知道也许有一种更性感的方式可以做到这一点,但我还是感到茫然


谢谢

好吧,我想我找到了一个有效的方法。我使用以下命令转储异步:

private static readonly HttpClient client = new HttpClient();

       public string GetEntities(string entity, string attributes, string apiurl, string key)
        {

            var requestparams = new Dictionary<string, string>
            {
                { "key", key },
                { "Operation", "GetEntities" },
                { "Entity", entity },
                { "Attributes",attributes}
            };

            var content = new FormUrlEncodedContent(requestparams);
            var task = System.Threading.Tasks.Task.Run(() => client.PostAsync(apiurl, content));
            task.Wait();
            var result = task.Result;
            var response = result.Content.ReadAsStringAsync().Result;
            return (response);
}

        
        
}
private static readonly HttpClient=new HttpClient();
公共字符串GetEntities(字符串实体、字符串属性、字符串APIRL、字符串键)
{
var requestparams=新字典
{
{“key”,key},
{“操作”,“获取实体”},
{“实体”,实体},
{“属性”,属性}
};
var content=newformurlencodedcontent(requestparams);
var task=System.Threading.Tasks.task.Run(()=>client.PostAsync(apirl,content));
task.Wait();
var result=task.result;
var response=result.Content.ReadAsStringAsync().result;
返回(响应);
}
}

对于我正在使用的小数据集,似乎效果很好。

好的,所以我想我找到了一种有效的方法。我使用以下命令转储异步:

private static readonly HttpClient client = new HttpClient();

       public string GetEntities(string entity, string attributes, string apiurl, string key)
        {

            var requestparams = new Dictionary<string, string>
            {
                { "key", key },
                { "Operation", "GetEntities" },
                { "Entity", entity },
                { "Attributes",attributes}
            };

            var content = new FormUrlEncodedContent(requestparams);
            var task = System.Threading.Tasks.Task.Run(() => client.PostAsync(apiurl, content));
            task.Wait();
            var result = task.Result;
            var response = result.Content.ReadAsStringAsync().Result;
            return (response);
}

        
        
}
private static readonly HttpClient=new HttpClient();
公共字符串GetEntities(字符串实体、字符串属性、字符串APIRL、字符串键)
{
var requestparams=新字典
{
{“key”,key},
{“操作”,“获取实体”},
{“实体”,实体},
{“属性”,属性}
};
var content=newformurlencodedcontent(requestparams);
var task=System.Threading.Tasks.task.Run(()=>client.PostAsync(apirl,content));
task.Wait();
var result=task.result;
var response=result.Content.ReadAsStringAsync().result;
返回(响应);
}
}
对于我正在使用的小数据集,似乎效果很好