如何将text / xml读入ASP.MVC控制器上的操作?
我有一个Web应用程序,可以从两个不同的来源接收POSTed Xml,因此Xml的内容可能不同.
我希望我的控制器上的默认操作能够读取Xml但是我很难看到我如何能够首先将Xml放入操作中.
如果Xml是一致的,我可以使用Model Binder,但这不可能.
解决方法
您可以从请求流中读取它:
[HttpPost] public ActionResult Foo() { using (var reader = new StreamReader(Request.InputStream)) { string xml = reader.ReadToEnd(); // process the XML ... } }
要清理此操作,您可以为XDocument编写自定义模型绑定器:
public class XDocumentModeBinder : IModelBinder { public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { return XDocument.Load(controllerContext.HttpContext.Request.InputStream); } }
您将在Application_Start中注册:
ModelBinders.Binders.Add(typeof(XDocument),new XDocumentModeBinder());
最后:
[HttpPost] public ActionResult Foo(XDocument doc) { // process the XML ... }
这显然更清洁.