Asp.net mvc RAZOR如何调用服务器端url POST
我们有两个位于内部网上的Web服务器。服务器A是我的,服务器B正在运行Tableau 我基本上想这样做:Asp.net mvc RAZOR如何调用服务器端url POST,asp.net-mvc,post,razor,Asp.net Mvc,Post,Razor,我们有两个位于内部网上的Web服务器。服务器A是我的,服务器B正在运行Tableau 我基本上想这样做: var myTicket = what you would get if this ran AS the server: var tableau_params = { username: 'DistrictDataReader'}; $.ajax({ t
var myTicket = what you would get if this ran AS the server:
var tableau_params = { username: 'DistrictDataReader'};
$.ajax({
type: "POST",
url: "http://Dataviz:8080/trusted",
data: tableau_params,
success: function (msg) { I want to set my myTicket to equal what comes back form server B}
});
我尝试了很多方法将ajax调用放在Javascript中,但是我很确定它实际上不是从Web服务器运行的,而是从客户端运行的。我尝试了两种ajax调用,都会导致CORS错误
<script>
$(function () {
$("#Result").click(function () {
var tableau_params = { username: 'DistrictDataReader'};
var ticket;
$.ajax({
type: "POST",
url: "http://Dataviz:8080/trusted",
data: tableau_params,
// First format attempt
dataType: "html",
success: function (msg) {
ticket = $('#Result').html(msg.d);
}
// Second format attempt
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
ticket = $('#Result').text(msg.d);
}
});
alert(ticket);
});
});
</script>
$(函数(){
$(“#结果”)。单击(函数(){
var tableau_params={username:'DistrictDataReader'};
var票;
$.ajax({
类型:“POST”,
url:“http://Dataviz:8080/trusted",
数据:表格参数,
//第一次格式化尝试
数据类型:“html”,
成功:功能(msg){
票证=$(“#结果”).html(msg.d);
}
//第二次格式化尝试
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
票证=$(“#结果”).text(msg.d);
}
});
警报(票据);
});
});
我还尝试在服务器B上打开CORS以允许任何操作通过,但鉴于上述两个示例都返回了源错误,我非常确定这确实不是从我的Web服务器上运行的
所以我想用另一种方法。我只想使用参数集{username:'DistrictDataReader'}将变量myTicket从POST设置为
我该怎么做
我在RAZOR中的一个cshtml页面上。如果仍然不允许跨源,则CORS设置不正确。不过,你还没有提供任何信息 另一种选择是使用JSONP,假设外部站点支持它或可以使其支持它。这完全绕过了CORS的需要。解决了这个问题: 这就是不使用AJax的方法:
@{
string postData = "username=DistrictDataReader";
byte[] data = System.Text.Encoding.ASCII.GetBytes(postData);
var myTicket = "";
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://dataviz:8080/trusted");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = postData.Length;
// Write the request
Stream outStream = req.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
// Do the request to get the response
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader inStream = new StreamReader(res.GetResponseStream());
string resString = inStream.ReadToEnd();
inStream.Close();
myTicket = resString;
}
catch {myTicket = "Ooops!";}
Response.Redirect("http://dataviz:8080/trusted/"+ myTicket +"/views/SBACStateandCounty/VermontMap");
}
好吧,CORS真的有点过时了——它的设置是正确的(关于这一点的整个其他帖子)——但是调用不是作为服务器来的。我真的想知道RAZOR中有没有一种方法可以设置一个变量,如下所示:var MyTicket=get result of post to http:___;username='someaccountname'No,不是这样的。我的意思是,鉴于Razor可以运行C#代码,您可以创建一个
HttpClient
,用它请求一些东西,解析结果,然后用该结果设置一个变量。然而,像这样的事情确实应该在视图之外进行。另外一个(?)基本问题。您正在执行一个异步Ajax调用,该调用稍后会返回值,但会尝试立即通知返回的值。“这就像点了一个比萨饼,然后在它送到之前试着吃了它”: