使用Fiddler,我可以在主体中传递
someXml=ThisShouldBeXml
然后在控制器中
[HttpPost]
public ActionResult Test(object someXml)
{
return Json(someXml);
}
以字符串形式获取此数据
如何让fiddler将XML传递给MVC ActionController?如果我尝试将正文中的值设置为原始xml,则不起作用。
对于奖励积分,我如何在VBscript/Classic ASP中执行此操作?
我目前有
DataToSend = "name=JohnSmith"
Dim xml
Set xml = server.Createobject("MSXML2.ServerXMLHTTP")
xml.Open "POST", _
"http://localhost:1303/Home/Test", _
False
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xml.send DataToSend
发布于 2013-07-31 05:17:56
这似乎是将XML付给MVC控制器的方法
How to pass XML as POST to an ActionResult in ASP MVC .NET
我试图让它与WEB API一起工作,但做不到,所以我不得不使用MVC 'Controller‘来代替它。
发布于 2018-04-26 21:59:32
MVC控制器对于这样的请求处理并不理想,但这就是我们的任务,所以让我们开始吧。让我们有一个我可以接受的XML:
<document>
<id>123456</id>
<content>This is document that I posted...</content>
<author>Michał Białecki</author>
<links>
<link>2345</link>
<link>5678</link>
</links>
</document>
我尝试了一些内置参数反序列化的解决方案,但似乎都不起作用,最后,我在方法体中反序列化了一个请求。我为它创建了一个辅助泛型类:
public static class XmlHelper
{
public static T XmlDeserializeFromString<T>(string objectData)
{
var serializer = new XmlSerializer(typeof(T));
using (var reader = new StringReader(objectData))
{
return (T)serializer.Deserialize(reader);
}
}
}
我用xml属性修饰了我的DTO:
[XmlRoot(ElementName = "document", Namespace = "")]
public class DocumentDto
{
[XmlElement(DataType = "string", ElementName = "id")]
public string Id { get; set; }
[XmlElement(DataType = "string", ElementName = "content")]
public string Content { get; set; }
[XmlElement(DataType = "string", ElementName = "author")]
public string Author { get; set; }
[XmlElement(ElementName = "links")]
public LinkDto Links { get; set; }
}
public class LinkDto
{
[XmlElement(ElementName = "link")]
public string[] Link { get; set; }
}
并在一个控制器中使用了所有这些:
public class DocumentsController : Controller
{
// documents/sendDocument
[HttpPost]
public ActionResult SendDocument()
{
try
{
var requestContent = GetRequestContentAsString();
var document = XmlHelper.XmlDeserializeFromString<DocumentDto>(requestContent);
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
catch (System.Exception)
{
// logging
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
}
}
private string GetRequestContentAsString()
{
using (var receiveStream = Request.InputStream)
{
using (var readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
return readStream.ReadToEnd();
}
}
}
}
要使用它,只需发送一个请求,例如使用Postman。我正在使用上面提到的XML体向http://yourdomain.com/documents/sendDocument端点发送POST请求。值得一提的是头部。添加Content-Type:文本/xml,或请求工作。
而且它是有效的:
你可以在我的博客上看到完整的帖子:http://www.michalbialecki.com/2018/04/25/accept-xml-request-in-asp-net-mvc-controller/
发布于 2013-07-30 23:56:29
为了使用VBScript发送请求,我使用了WinHttp对象,即"WinHttp.WinHttpRequest.5.1“。
下面是我编写的一个函数,它发送您传入的XML请求并返回响应:
' -----------------------------------------
' Method: sendRequest()
' Descrip: send the web service request as SOAP msg
' -----------------------------------------
Public Function sendRequest(p_SOAPRequest)
Const METHOD_NAME = "sendRequest()"
Dim objWinHttp
Dim strResponse
Dim URL
URL = "http:someURL.com"
Const WINHTTP_OPTION_SECURITY_FLAGS = 13056 '13056: Ignores all SSL Related errors
Const WinHttpRequestOption_SslErrorIgnoreFlags = 4 'http://msdn.microsoft.com/en-us/library/Aa384108
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
'Open HTTP connection
Call objWinHttp.Open("POST", URL, False)
'Set request headers
Call objWinHttp.setRequestHeader("Content-Type", m_CONTENT_TYPE)
Call objWinHttp.setRequestHeader("SOAPAction", URL)
'Ignore the requirement for a security certificate:
'http://msdn.microsoft.com/en-us/library/windows/desktop/aa384086(v=vs.85).aspx
objWinHttp.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = WINHTTP_OPTION_SECURITY_FLAGS
'Send SOAP request
On Error Resume Next
objWinHttp.Send p_SOAPRequest
If Err Then
m_objLogger.error(METHOD_NAME & " error " & Err.Number & ": " & Err.Description)
Err.Clear
End If
'disable error handling
On Error GoTo 0
'Get XML Response
strResponse = objWinHttp.ResponseText
'cleanup
Set objWinHttp = Nothing
sendRequest = strResponse
End Function
https://stackoverflow.com/questions/17951384
复制相似问题