Asp.net mvc RAZOR如何调用服务器端url POST

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

我们有两个位于内部网上的Web服务器。服务器A是我的,服务器B正在运行Tableau

我基本上想这样做:

    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调用,该调用稍后会返回值,但会尝试立即通知返回的值。“这就像点了一个比萨饼,然后在它送到之前试着吃了它”: