[AX2012中使用HttpWebRequest的POST XML文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[AX2012中使用HttpWebRequest的POST XML文件相关的知识,希望对你有一定的参考价值。

我需要调用一个API,该API接受以单个XML文件为参数的POST请求。我尝试过通过邮递员(具有表单数据内容类型)调用资源,并且似乎可以正常工作。尝试在AX中实施此操作时,服务器出现错误500。

这是POST请求:

void executeRequest(XmlDocument _data)


    clrRequestObject = System.Net.WebRequest::Create("/URL/WEB/API/");
    webRequest = clrRequestObject;

    //Set Method Type
    webRequest.set_Method("POST");
    webRequest.set_CookieContainer(cookieCon);
    webRequest.set_KeepAlive(true);

    new InteropPermission(InteropKind::ClrInterop).assert();

    // Set Content type
    webRequest.set_ContentType("multipart/form-data; boundary=---------------------------7db2511d20514");
    byteArray = this.getMultipartFormData(_data,"filename");

    inputStream = webRequest.GetRequestStream();
    inputStream.Write(byteArray, 0, byteArray.get_Length());

    webResponse = webRequest.GetResponse();

    inputStream.Close();
    stream.Close();
    webResponse.Close();




private System.Byte[] getMultipartFormData(XmlDocument _data, str name)

    #define.DocFieldFormat('--\%1\r\nContent-Disposition: form-data; name=\"\%2\"; filename=\"\%3\";\r\nContent-Type: ' + '\%4\r\n\r\n')
    #define.Dot('.')

    System.IO.MemoryStream memstream = new System.IO.MemoryStream();
    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    BinData binData = new BinData();
    System.Byte[] bytes;
    str s;
    XMLWriter xmlWriter;
    str path = WinAPI::getTempPath();
    Filename filename = path+name+".xml";
    System.IO.FileStream fileStream;

    xmlWriter = XmlWriter::newFile(filename);
    _data.writeTo(XmlWriter);
    xmlWriter.close();

        // Header
        s = strFmt(
            #DocFieldFormat,
            ---------------------------7db2511d20514,
            name,
            name+#Dot+"xml",
            "text/xml");
        bytes = encoding.GetBytes(s);
        memstream.Write(bytes, 0, bytes.get_Length());

        /*Alternative attempt to set content 1*/
        //binData.setStrData(_data.outerXml());
        //bytes = encoding.GetBytes(binData.base64Encode());
        //memstream.Write(bytes, 0, bytes.get_Length());

        /*Alternative attempt to set content 2*/
        //bytes = encoding.GetBytes(_data.outerXml());
        //memstream.Write(bytes, 0, bytes.get_Length());

        /*Alternative attempt to set content 3*/
        fileStream = System.IO.File::OpenRead(filename);
        fileStream.CopyTo(memstream);

    

    s = "\r\n--" + #FormDataBoundary + "--\r\n";
    bytes = encoding.GetBytes(s);
    memstream.Write(bytes, 0, bytes.get_Length());

    bytes = memstream.ToArray();
    memstream.Close();

    return bytes;

我正在调查API服务器上的确切错误是为了帮助我进行故障排除,但是正在寻找有关我可能做错了什么的建议。是否有通过AX执行此操作的替代方法?

答案
None

以上是关于[AX2012中使用HttpWebRequest的POST XML文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTTPS 和 httpWebRequest

HTTPWebRequest.GetResponse() 通过透明代理验证请求失败

打开操作未在分配的 00:01:00 超时内完成 - AX 2012 使用 AIF/WCF

C# 使用 HTTPWebRequest 拉取网页并从站点执行 javascript

为啥 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

读取 HttpWebRequest 的 HTTP POST 请求