Receive (and send) XML via POST with ASP.NET

后端 未结 3 836
无人及你
无人及你 2021-01-03 05:55

I have to set up an XML \"web service\" that receives a POST where the \'Content-type header will specify “text/xml”.\'

What is the simplest way to get the XML into

3条回答
  •  清酒与你
    2021-01-03 06:48

    Given Steven's warning, the answer may be to parse Request.InputStream manually with Tom Holland's test first, followed by XDocument.Load in the Page_Load event.

    A Google search initiated before I asked the question, but only checked after, found this, also suggesting I'm on the right track.

    Also I was going to ask the question implied by my point that the response had to be XML too, as to what is the best way for that, but I've found an answer here.

    In summary, the final code is:

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        If Request.ContentType <> "text/xml" Then _
            Throw New HttpException(500, "Unexpected Content-Type")
    
        Dim id = CheckBasicAuthentication
    
        Dim textReader = New IO.StreamReader(Request.InputStream)
    
        CheckXmlValidity(textReader)
    
        ' Reset the stream & reader
        Request.InputStream.Seek(0, IO.SeekOrigin.Begin)
        textReader.DiscardBufferedData()
    
        Dim xmlIn = XDocument.Load(textReader)
    
        ' process XML in xmlIn
    
        Dim xmlOut = 
                     
                         
    <%= id.ToString() %> To be inserted
    ' Further generation of XML for output xmlOut..
    ..Value = Date.UtcNow.ToString(xmlDateFormat) xmlText.Text = xmlOut.ToString End Sub Private Function CheckBasicAuthentication() As Integer Dim httpAuthorisation = Request.Headers("Authorization") If Left(httpAuthorisation, 6).ToUpperInvariant <> "BASIC " Then _ Throw New HttpException(401, "Basic Authentication Required") Dim authorization = Convert.FromBase64String(Mid(httpAuthorisation, 7)) Dim credentials = Text.Encoding.UTF8.GetString(authorization).Split(":"c) Dim username = credentials(0) Dim password = credentials(1) Return ConfirmValidUser(username, password) End Function Private Shared Sub CheckXmlValidity(ByVal textReader As System.IO.StreamReader) Try ' Check for "interesting" xml documents. Dim settings = New System.Xml.XmlReaderSettings() settings.XmlResolver = Nothing settings.MaxCharactersInDocument = 655360 ' Successfully parse the file, otherwise an XmlException is to be thrown. ' Dim reader = System.Xml.XmlReader.Create(textReader, settings) Try While reader.Read() 'Just checking. End While Finally reader.Close() End Try Catch ex As Exception Throw New HttpException(500, "Invalid Xml data", ex) End Try End Sub

    and the ASP.NET webpage.aspx is:

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="webpage.aspx.vb" Inherits="WebPage" ContentType="text/xml" %>
    
     
    

    NB Throwing HTTPException is not a valid final solution for unwanted scenarios.

提交回复
热议问题