当前位置: 首页 > 面试题库 >

如何将XML作为POST传递给ASP MVC .NET中的ActionResult

滕鸿畴
2023-03-14
问题内容

我正在尝试为我的ASP MVC项目提供一个简单的RESTful
API。我将无法控制此API的客户端,它们将通过POST方法传递XML,该方法将包含在服务器端执行某些操作所需的信息,并向XML提供操作结果。我没有发回XML的问题,问题是通过POST接收XML。我已经看到了一些JSON示例,但是由于我将无法控制自己的客户端(从我的角度来看,它甚至可能是telnet),我认为JSON无法正常工作。我对么?

我看到了一些示例,其中客户只是将正确的表单格式构造为请求主体的一部分,然后ASP解析该消息,并且数据以FormCollection的形式提供(?param1
= value1&param2 = value2&etc)。但是,我想将纯XML作为消息正文的一部分传递。

谢谢你的帮助,


问题答案:

这可以通过使用ActionFilterAttribute来完成。动作过滤器基本上在动作结果之前或之后与请求相交。因此,我只是为POST操作结果构建了一个自定义操作过滤器属性。这是我所做的:

public class RestAPIAttribute : ActionFilterAttribute
{
    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.");
        }

        int streamLength = Convert.ToInt32(httpBodyStream.Length);
        byte[] byteArray = new byte[streamLength];
        const int startAt = 0;

        /*
         * Copies the stream into a byte array
         */
        httpBodyStream.Read(byteArray, startAt, streamLength);

        /*
         * Convert the byte array into a string
         */
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < streamLength; i++)
        {
            sb.Append(Convert.ToChar(byteArray[i]));
        }

        string xmlBody = sb.ToString();

        //Sends XML Data To Model so it could be available on the ActionResult

        base.OnActionExecuting(filterContext);
    }
}

然后在控制器上的操作结果方法上,您应该执行以下操作:

    [RestAPIAttribute]
    public ActionResult MyActionResult()
    {
        //Gets XML Data From Model and do whatever you want to do with it
    }

希望这对其他人有帮助,如果您认为还有其他更优雅的方法,请告诉我。



 类似资料:
  • 问题内容: 我读了很多文章,尝试了很多事情,但仍然无法通过xsl在参数中找到值。我从java的sun xalan开始,但是从来没有运行过,所以我改用saxon无济于事。我想将两个xml文档与xls合并为一个。永远不要在文件系统上,这是用于构建xml字符串/ docs的Web应用程序。我尝试将DTMAxisIterator,DomSource,Doc传递给以xsl,字符串设置的Node。在带有xsl

  • 问题内容: 该文档讨论了使用numba的作为的参数。我需要带有附加参数的相同内容。 我基本上是想做这样的事情: 但是,它不起作用,因为应该是/并且不能将它们转换为。我收到以下错误消息: 我没有找到有关如何从Numba中提取值的任何信息。在C语言中,应该类似于—在Numba中可以做同样的事情吗? 问题答案: 1.通过传递额外的参数 该文件说: 如果用户希望改善集成性能,则可以使用以下签名之一: 该是

  • 我试图用Postman写一个非常简单的测试。我有两个URL和第一个URL得到一些XML文件,然后存储在邮递员变量作为一个前脚本部分。之后,第二个URL使用此响应并发送另一个POST请求。 但是在成功地从xml中得到结果后,不知何故邮递员没有通过这个请求,而是给出了400。 谢谢

  • 问题内容: 我正在创建一种通过传递搜索字段从任何表中选择ID的方法。 但是我得到一个有关语法错误的MySqlException。当我查看“异常”消息时,它向我显示带引号的查询表!如何将表格作为不带引号的参数传递? 问题答案: 大多数数据库不允许您通过参数指定表名或列名。参数用于 值 。如果确实确实需要使它动态化,则应验证输入(它应该是一个已知的表名,并且该表中具有已知的列名),然后将其包括在SQL

  • 我想将URL放在GET Request中,这样我就可以将用户重定向到给定的URL。 这是我到目前为止的代码: 示例url我用来获取-http://localhost:8080/app/controller/redirectionTest/1234/http://localhost:3000/main 所以当我调用GET方法时,我想运行一些代码,然后被重定向到http://localhost:300