如何使用ASP.Net发送HTTP请求并且获取返回的XML

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ASP.Net发送HTTP请求并且获取返回的XML相关的知识,希望对你有一定的参考价值。

要求发送一条HTTP请求。 然后对方会返回一个XML内容 如何发送请求,并获取XML节点的值呢?
是网页形式的。 不是应用程序。

你说的是在 客户端里浮环实验是在服务端里?

客户端的话,上面有人说了,是 AJAX ,也贴出了代码。。。

虽然兼容性不高,但可以解决你的问题。
如果是服务端的,你可以使用下面的方法获取对方返回的 XML ,然后再使用 xmldocument 等来处理 xml

/// <summary>
/// 获取发出请求,并获取网页源代码
/// </summary>
/// <param name="url"></param>
/// <param name="encoding">System.Text.Encoding</param>
/// <returns></returns>
public static string GetWebPage(string url, Encoding encoding)

HttpWebRequest request = null;
HttpWebResponse response = null;
StreamReader reader = null;
try

request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = HttpContext.Current.Request.Url.Host.ToString();
request.Timeout = 20000;
request.AllowAutoRedirect = false;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK && response.ContentLength < 1024 * 1024)

reader = new StreamReader(response.GetResponseStream(), encoding);
string html = reader.ReadToEnd();
return html;


catch
finally

if (response != null) response.Close(); response = null;
if (reader != null) reader.Close();
if (request != null) request = null;

return string.Empty;
参考技术A 用JQuery
<script type="text/jscript">
$(document).ready(function()

$.ajax(
type: "POST",
url: "http://sellonline.canadapost.ca:30000",
data: $("#XMLRequest").val(),
error: function()
alert('Error');
,
success: function(data) //以下部分是解析XML

var statusCode="";
$(data).find('ratesAndServicesResponse ').each(function()
statusCode += $(this).children("statusCode").text();
alert(statusCode);
);
var name="";
$(data).find('product ').each(function()
name += $(this).children("rate").text();
name += '<br>';
$('#jieguo').html(name);
);
//
);
);

</script>

不过还是建议你现研究下xmlhttprequest 核心的东西不懂的话 用JQuery比较类, 目前jquery已出到1.4 用起来很方便
参考技术B 前台的话用
<SCRIPT language="javascript">
// Client invoke WebService use HTTP POST request and response
function GetHelloWorld_HTTPPOST(i)

var URL = "URL";
var Params = "i=" + i;// Set postback parameters
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("POST",URL, false);
xmlhttp.SetRequestHeader ("Content-Type","application/x-www-form-urlencoded");
xmlhttp.SetRequestHeader ("Content-Length",Params.length);
xmlhttp.send(Params);
var x = xmlhttp.responseXML;
alert(x.childNodes[1].text);
//那么如何知道是否调用成功呢,状态为200说明调用成功,500则说明出错
alert(xmlhttp.Status);
alert(xmlhttp.StatusText);

</SCRIPT>

后台的话,XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load("url");

很简单
参考技术C string s = new System.Net.WebClient().DownloadString(uri);
获取节点用正则
参考技术D 用JQuery吧

如何在asp.net中获取windows认证用户的用户名?

【中文标题】如何在asp.net中获取windows认证用户的用户名?【英文标题】:How to get the username of windows authenticated user in asp.net? 【发布时间】:2016-09-08 08:21:43 【问题描述】:

我有一个单页应用程序在我们的 Intranet 中运行。用户通过 Windows 身份验证(他们的域用户)进行身份验证。单击按钮时,我想向具有以下代码的 aspx 页面发送请求(使用 $http,Angular):

        string result = "Unknown";
        var loggedOnUser = System.Security.Principal.WindowsIdentity.GetCurrent();
        if (loggedOnUser != null) 
            int index = loggedOnUser.Name.LastIndexOf("\\", StringComparison.Ordinal) + 1;
            result = loggedOnUser.Name.Substring(index);
        
        var json = " \"User\" : \"" + result + "\"";
        Response.Clear();
        Response.ContentType = "text/json";
        Response.Write(json);
        Response.End();

此代码只给了我在应用程序池中注册的用户的名称。这确实并不令人惊讶,所以我想我需要在这里做一些假装?这样做的原因是我想要在我的 javascript 中使用用户名,以便它可以作为其他调用服务器的参数发送。 我在网上搜索过,每个人都说获取登录用户的用户名是一个很大的安全漏洞。我确实看到了。但是当它以涉及服务器代码的方式完成时,我可能是一种解决方法?

有什么建议吗?

谢谢!

【问题讨论】:

如果您在其他调用中将用户名作为参数发送,有什么办法可以阻止受过教育的用户用其他人的用户名替换该用户名?您的身份验证应在每次调用时进行。 还有一点,您网站的身份验证设置是什么?您是否允许匿名身份验证? 这是一个 Intranet 应用程序,用户具有良好的意图,因此安全性不是问题。我可以要求用户输入他的域用户名或创建登录表单或类似的东西,问题就会得到解决。我只是想让我的同事轻松一点,以便他们使用 Windows 域用户帐户登录一次。 Windows 身份验证在 IIS 中设置。目前不允许匿名访问。我会采取任何可行的黑客攻击,毕竟它都是内部的并且在防火墙后面。 【参考方案1】:

我在Login点击时得到了这样的结果

 protected void btnLogin_Click(object sender, EventArgs e)
    
        try
        
            string UserName = "";
            string activeDomain = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
            string strName = HttpContext.Current.User.Identity.Name.ToString();


            if (strName == "")
            
                UserName = activeDomain;
            
            else
            
                UserName = strName;
            

            if (UserName == "")
            
                lblMsg.Text = "Invalid Credentials. Please contact administrator!";
            
            else
            
                LP.UserName = UserName;
                DataSet dsUserName = LBLL.validate_user(LP);
                if (dsUserName.Tables[0].Rows.Count > 0)
                
                    Session["UserName"] = dsUserName.Tables[0].Rows[0]["userName"].ToString();
                    Session["entityUID"] = dsUserName.Tables[0].Rows[0]["entityUID"].ToString();
                    Response.Redirect("~/index.aspx", false);
                
                else
                
                    lblMsg.Text = "Invalid Credentials. Please contact administrator!";
                
            
        
        catch (Exception ex)
        

        
    

【讨论】:

以上是关于如何使用ASP.Net发送HTTP请求并且获取返回的XML的主要内容,如果未能解决你的问题,请参考以下文章

php如何通过get方法发送http请求,并且得到返回的参数

从 Angular 向 Asp.net 发送 post 请求时出现错误 405

jQuery 在 ASP.Net MVC 5 中获取请求

如何在asp.net中获取windows认证用户的用户名?

asp.net后台 怎么发送http请求?

每当我发送包含 Bearer 令牌的请求时,ASP.Net Core API 总是返回 401 未授权