2013-04-08 3 views
0

Не знаю, если это проблема кодировки символовRequest.Params в строку дает неполные данные

Я сделал запрос POST на странице asp.net, я посылаю XML, для того, чтобы получить значение в переменная Я сделал это

String selectionXml = HttpUtility.UrlDecode(Request.Params["SELECTION"]); 

Это пример моего XML

<?xml version="1.0" encoding="UTF-8"?> 
<FeatureSet> 
<Layer id="0adcf012"> 
<Class id="MyTable"> 
<ID>AAAAAAAmvEA=</ID> 
<ID>AAAAAAC+5EA=</ID> 
</Class> 
</Layer> 
</FeatureSet> 

проблема, когда я выполняю выше предложение я получаю этот XML

<?xml version="1.0" encoding="UTF-8"?> 
<FeatureSet> 
<Layer id="0adcf012"> 
<Class id="MyTable"> 
<ID>AAAAAAAmvEA=</ID> 
<ID>AAAAAAC 5EA=</ID> 
</Class> 
</Layer> 
</FeatureSet> 

т.е. второй ID тега (AAAAAAC 5EA =) появляется без знака плюс (+), в отличие от оригинального XML (AAAAAAC + 5EA =)

Как я могу решить эту проблему?

EDIT: Я добавить больше кода, это моя страница asp.net (с помощью библиотеки MapGuide)

<%@ Page Language="C#" Debug="true" validateRequest="false"%> 
<%@ Import Namespace="System" %> 
<%@ Import Namespace="System.Collections.Specialized" %> 
<%@ Import Namespace="System.IO" %> 
<%@ Import Namespace="OSGeo.MapGuide" %> 

<!-- #Include File="common.aspx" --> 
<% 

    Response.Charset = "utf-8"; 
    String sessionId; 
    String mapName; 
    String locale; 
    int target=0; 
    int popup=0; 
    String selectedLayer; 
    MgSelection selection = null; 
    sessionId = Request.Params["SESSION"]; 
    mapName = Request.Params["MAPNAME"]; 
    locale = Request.Params["LOCALE"]; 
    target = int.Parse(Request.Params["TGT"]); 
    popup = int.Parse(Request.Params["POPUP"]); 
    selectedLayer = Request.Params["LAYERTARGET"]; 

    bool todos = false; 
    try 
    { 

     // Initialize the Web Extensions and connect to the Server using 
     // the Web Extensions session identifier stored in PHP session state. 

     //MapGuideApi.MgInitializeWebTier (Constants.WebConfigPath); 
     InitializeWebTier(); 
     MgUserInformation userInfo = new MgUserInformation(sessionId); 
     MgSiteConnection siteConnection = new MgSiteConnection(); 
     siteConnection.Open(userInfo); 

     MgMap map = new MgMap(siteConnection); 
     map.Open(mapName); 

     // ---------------------------------------------------------- 
     // Use the following code for AJAX or DWF Viewers 
     // This requires passing selection data via HTTP POST 

     MgReadOnlyLayerCollection layers = null; 
     **String selectionXml = HttpUtility.UrlDecode(Request.Params["SELECTION"]);** 
     if (selectionXml!= null) 
     { 
     selection = new MgSelection(map, selectionXml); 
     layers = selection.GetLayers(); 
     } 

     .......... 

ответ

1

Как я могу решить эту проблему?

Почему вы используете HttpUtility.UrlDecode? Это XML, а не URL! Пока вы используете POST request, вам не нужен HttpUtility.UrlDecode.

+0

Вы правы, сначала я выполнял запрос GET, затем я перешел на POST, и я забыл прекратить использование HttpUtility.UrlDecode, что сделало трюк, спасибо –

+0

@NatyBizz Добро пожаловать! –

Смежные вопросы