我正在为我的ASP MVC项目提供一个简单的RESTful API.我不会控制这个API的客户端,他们将通过一个POST方法传递一个
XML,该方法将包含在服务器端执行某些操作所需的信息,并提供一个带有该操作结果的XML.我没有发回XML的问题,问题是通过POST接收XML.我已经看到一些
JSON的例子,但是由于我不会控制我的客户端(从我的角度来看,它可能是一个telnet),我不认为JSON将会工作.我对么?
我看到一些例子,客户端只需将正确的格式格式构造为请求正文的一部分,然后ASP解析消息,数据可用作FormCollection(?param1 = value1& param2 = value2&等).但是,我想传递纯XML作为邮件正文的一部分.
谢谢你的帮助,
解决方法
@Freddy – 喜欢你的方法,并用以下代码改进它,以简化流读取:
public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContextBase httpContext = filterContext.HttpContext; if (!httpContext.IsPostNotification) { throw new InvalidOperationException("Only POST messages allowed on this resource"); } Stream httpBodyStream = httpContext.Request.InputStream; if (httpBodyStream.Length > int.MaxValue) { throw new ArgumentException("HTTP InputStream too large."); } StreamReader reader = new StreamReader(httpBodyStream,Encoding.UTF8); string xmlBody = reader.ReadToEnd(); reader.Close(); filterContext.ActionParameters["message"] = xmlBody; // Sends XML Data To Model so it could be available on the ActionResult base.OnActionExecuting(filterContext); }
然后在Controller中,您可以使用字符串访问xml:
[RestAPIAttribute] public ActionResult MyActionResult(string message) { }