编程回忆之C#回忆(如何向webservice传输xml格式字符串)

如何向webservice传输xml格式字符串

C#编程中,犹豫考虑到安全问题,webservice是禁止客户端传入xml格式的字符串的。而根据项目需要,我们又经常需要传输xml格式字符串,那应当如何去处理这个问题呢。

一、配置aspx中的参数

当出错时,可以这样么做,

因为aspxValidateRequest的值默认为true,所以会报错。所以将ValidateRequest的值改为false就可以。

如果,页面中没有配置ValidateRequest参数,它是默认为true的,所以需要在页面aspx中文件头添加上ValidateRequest参数。

<%@ Page  ValidateRequest="false" >


二、针对Edit方法进行特殊配置

例如,Edit方法需要传入xml格式字符串,那就给

[ValidateInput(false)]
public ActionResult Edit()
{
this.ValidateRequest = false;
retrun View();
}

 

三、配置web.config

system.web节点下加入以下配置

<system.web>
  <httpRuntime requestValidationMode="2.0" />
</system.web>

 


 

注:以上这些方式都是治标不治本的,容易导致webservice不安全。当具有攻击性质的xml传输进来的时候,webservice不能进行防范。所以最好用第四种解决方案。

 

四、用相应的字符代替<>符号

在进行xml格式字符串传输的时候,将字符串通过格式转换,用相应的字符串代替

 

StringBuilder sb = new StringBuilder(
HttpUtility.HtmlEncode(htmlInputTxt.Text));
// 然后我们选择性的允许<b> 和 <i>
sb.Replace("<b>", "<b>");
sb.Replace("</b>", "");
sb.Replace("<i>", "<i>");
sb.Replace("</i>", "");
Response.Write(sb.ToString());


 

备注:我们再思考一下为什么这个错误有时候难易发现呢,原因在于我们没有写异常处理,所以异常处理是至关重要的!所以第五点,要写异常处理。

五、异常处理

在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信 息。如果当前页面没有Page_Error(),这个异常将会送到Global.asaxApplication_Error()来处理,你也可以在那 里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。

举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码:

以下是引用片段:

protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("请您输入合法字符串。");
Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
}
}


 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要向 WebService 发送 XML 格式的请求,需要使用以下步骤: 1. 构建 XML 请求消息体:根据 WebService 的接口文档,构建符合其要求的 XML 请求消息体。 2. 创建 HTTP 连接:使用 HttpClient 或 HttpURLConnection 等库创建 HTTP 连接,设置请求的 URL 和请求方法为 POST。 3. 设置请求头:设置 Content-Type 为 text/xml;charset=UTF-8,表示请求体为 XML 格式。 4. 发送请求:将请求消息体通过 HTTP 连接发送出去。 5. 接收响应:等待 WebService 的响应,解析响应消息体,获取返回的数据。 以下是一个 Java 实现的示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class WebServiceClient { public static void main(String[] args) throws Exception { // 构建 XML 请求消息体 String requestXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://example.com/service/\"><soapenv:Header/><soapenv:Body><ser:getData><arg0>123</arg0></ser:getData></soapenv:Body></soapenv:Envelope>"; // 创建 HTTP 连接 URL url = new URL("http://example.com/service"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); // 设置请求头 conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8"); // 发送请求 conn.setDoOutput(true); conn.getOutputStream().write(requestXml.getBytes("UTF-8")); // 接收响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } } ``` 注意:以上代码仅作为示例,实际使用时需要根据具体的 WebService 接口文档进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值